【问题标题】:Can C++ main be inside a class and call a derived class? [duplicate]C++ main 可以在类中并调用派生类吗? [复制]
【发布时间】:2013-02-11 10:58:48
【问题描述】:

我不熟悉使用类/对象。我正在尝试写这样的东西:

class C1{

    main ()
    {
         C2::foo();
    }
};

class C2:public C1
{
public:
    foo()
    {
    }
};

当调用 C2::foo() 时,编译器会抱怨 C2 不是类或命名空间。如果我将类 C2 定义移到前面,则未定义 C1。在这里可以做什么?

【问题讨论】:

    标签: c++


    【解决方案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
          猜你喜欢
          • 2013-08-15
          • 2015-05-30
          • 2012-11-22
          • 2014-12-05
          • 2014-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多