我是使用类/对象的新手。我正在尝试写这样的东西:
class C1{
main ()
{
C2::foo();
}
};
class C2:public C1
{
public:
foo()
{
}
};
当调用C2 :: foo()时,编译器抱怨C2不是类或命名空间。如果我在前面移动C2类定义,则不定义C1。可以在这做什么?
答案 0 :(得分:2)
您可以使用名为main
的成员函数创建一个类,但不 main
被调用以启动您的程序 - 需要是一个全局函数(在任何类或命名空间之外)。但是,是的,名为main
的成员函数完全没问题(§3.6.1/ 3):
名称
main
未另外保留。 [示例:成员函数,类和枚举可以被称为main
,其他名称空间中的实体也可以被称为class C1 { int main(); }; class C2 : public C1 { public: int foo(); // or perhaps: static int foo(); }; int C1::main() { C2::foo(); // given `C2::static int foo();` // otherwise: C2 c; c.foo(); }
。 - 结束示例]
至于如何安排代码,通常会得到类似的结果:
{{1}}
答案 1 :(得分:1)
主要不应该在课堂内。
答案 2 :(得分:1)
不,main
不能在课堂内。 (为了说清楚,你可以在一个类中使用名为main
的函数,但它们不是你程序的入口点。)
(C ++标准版n3337,第3.6.1节)
程序应包含名为
main
的全局函数 指定的计划开始。
答案 3 :(得分:1)
main
可以在一个类中。但它与入口点main
不一样,它必须是全局的!
以下是一个例子:
#include <iostream>
using namespace std;
class C2 {
public:
void foo() {
cout << "Foo!";
}
};
class C1 {
public:
void main() { // not the same as the entry-point `main`
cout << "What?";
b.foo();
}
private:
B b;
};
int main() //actual entry point `main`
{
A a;
a.main();
return 0;
}
但是请注意,您的代码存在严重缺陷,因为其中一个成员函数必须具有返回类型。(void
如果您没有返回任何内容)。其次,foo
是一个对象函数,这意味着只能使用C2
类型的对象调用它。