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 可以在类中并调用派生类吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以在所述类中调用我的函数中的类吗?

派生类中的静态方法可以在 C++ 中调用受保护的构造函数吗?

c++ 三大特性之继承

在C++中,啥是运算符重载?啥是虚函数?

C++ 在派生类中使用using声明改变基类成员的可访问性

SCSS中定义变量