C++ Can C++;main是否位于类内并调用派生类?
我不熟悉使用类/对象。我试着写这样的东西:C++ Can C++;main是否位于类内并调用派生类?,c++,C++,我不熟悉使用类/对象。我试着写这样的东西: class C1{ main () { C2::foo(); } }; class C2:public C1 { public: foo() { } }; class C1 { int main(); }; class C2 : public C1 { public: int foo(); // or perhaps: static int foo()
class C1{
main ()
{
C2::foo();
}
};
class C2:public C1
{
public:
foo()
{
}
};
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();
}
当调用C2::foo()时,编译器会抱怨C2不是类或命名空间。如果我将C2类定义移到前面,则C1未定义。这里可以做什么?main不应该在类内。不,
main
不能在类内。(为了明确起见,您可以在类中使用名为main
的函数,但它们不会成为程序的入口点。)
(C++标准n3337,第3.6.1节)
程序应包含一个名为main
的全局函数,该函数是
计划的指定开始
您可以使用名为
main
的成员函数创建一个类,但启动程序时调用的不是main
——它需要是一个全局函数(在任何类或命名空间之外)。但是是的,名为main
的成员函数非常好(§3.6.1/3):
名称main
未被保留。[示例:成员函数、类和枚举可以调用main
,其他名称空间中的实体也可以调用。--结束示例]
至于如何安排代码,您通常会得到如下结果:
class C1{
main ()
{
C2::foo();
}
};
class C2:public C1
{
public:
foo()
{
}
};
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
不同,它必须是全局的
以下是一个例子:
#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;
}
#包括
使用名称空间std;
C2类{
公众:
void foo(){
与答案相反,main可以在类内。
。在您的示例中,main不在类内,只有一个名为main的方法,这与我们正在讨论的main
有很大不同。您的main
仍然不在类内。这是一种表达您想要表达的内容的有效方式ay就像杰瑞·科芬在下一个答案中所做的一样。@Spook,是的,把它删掉了。我不记得我读过什么让我写下了“与答案相反”的内容语句。但这与当时发布的一个答案有关。我仍然会这样澄清:您可以通过在某个类中创建名为main的静态函数来以对象方式编写程序。但它仍然必须从全局main函数调用。