C++ main 可以在类中并调用派生类吗? [复制]
Posted
技术标签:
【中文标题】C++ main 可以在类中并调用派生类吗? [复制]【英文标题】:Can C++ main be inside a class and call a derived class? [duplicate] 【发布时间】:2013-02-11 10:58:48 【问题描述】:我不熟悉使用类/对象。我正在尝试写这样的东西:
class C1
main ()
C2::foo();
;
class C2:public C1
public:
foo()
;
当调用 C2::foo() 时,编译器会抱怨 C2 不是类或命名空间。如果我将类 C2 定义移到前面,则未定义 C1。在这里可以做什么?
【问题讨论】:
【参考方案1】:您可以创建一个具有名为 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();
【讨论】:
【参考方案2】:main 根本不应该在一个类中。
【讨论】:
【参考方案3】:不,main
不能在一个类中。 (为了清楚起见,您可以在一个类中拥有名为 main
的函数,但它们不会成为您程序的入口点。)
(C++ 标准 n3337,第 3.6.1 节)
一个程序应该包含一个名为
main
的全局函数,它是 指定程序的开始。
【讨论】:
【参考方案4】:a 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
类型的对象调用。
【讨论】:
您说Contrary to the answers, a main can be inside of a class.
让读者感到困惑。在您的示例中,main 不在类内部,只有一个名为 main 的方法,与我们正在谈论的main
有很大不同。你的main
仍然不是在课堂上。表达您想说的有效方式就像 Jerry Coffin 在下一个答案中所做的那样。
@Spook,是的,把它删掉了。我不记得我读到了什么让我写了“与答案相反”的陈述。但这与当时发布的答案之一有关。
我还是会清除它,例如:You can write program in object manner by creating static function called main in some class. It still has to be called from global main function though
。以上是关于C++ main 可以在类中并调用派生类吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章