我是使用类/对象的新手。我正在尝试写这样的东西:
class C1{
main ()
{
C2::foo();
}
};
class C2:public C1
{
public:
foo()
{
}
};
当调用 C2::foo() 时,编译器会抱怨 C2 不是类或命名空间。如果我将类 C2 定义移到前面,则未定义 C1。在这里可以做什么?
我是使用类/对象的新手。我正在尝试写这样的东西:
class C1{
main ()
{
C2::foo();
}
};
class C2:public C1
{
public:
foo()
{
}
};
当调用 C2::foo() 时,编译器会抱怨 C2 不是类或命名空间。如果我将类 C2 定义移到前面,则未定义 C1。在这里可以做什么?
您可以使用名为 的成员函数创建一个类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();
}
main 根本不应该在一个类中。
不,main
不能在班级内。(为了清楚起见,您可以main
在类中调用函数,但它们不会成为您程序的入口点。)
(C++ 标准 n3337,第 3.6.1 节)
一个程序应包含一个名为 的全局函数
main
,它是程序的指定开始。
amain
可以在类中。但它与入口点不同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
。