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函数调用。