为什么我们不将C ++ main方法放在类中?

时间:2012-07-10 19:28:51

标签: c++

在C ++中为什么我们不将main方法放在类中(如Java)?为什么这样做没有意义(我认为)?

7 个答案:

答案 0 :(得分:23)

我们可以。 main不是保留字。但是根据语言标准,C ++工具链期望程序的入口点在全局范围内为main。因此,类中的main将不会被识别为程序的入口点。

随意定义一个名为main的类方法,并从全局main中调用它。

这种设计从C开始。与现有C代码的兼容性是C ++早期的主要设计目标,改变入口点约定几乎没有任何实际好处。所以他们保持了C标准。就像每个人都说的那样,与Java不同,C ++完全允许独立(即非类)函数。

答案 1 :(得分:22)

我们为什么?我们为什么需要?

对于有意义的类方法,我们必须有一个对象的实例。调用main时,我们没有实例。

所以它可能已成为静态成员函数,但会是什么意思?它是“更加面向对象”吗?怎么样?

我认为C ++的做法很有道理:main是在任何实例存在之前,之前你有任何对象的地方。

在Java中,main是一个静态成员,因为没有别的东西存在。但是在C ++中,存在非成员函数,那么为什么不让main成为其中之一呢?

答案 2 :(得分:10)

因为在远远早于类的C中,main是一个独立的函数,并且在C ++中没有改变以保持兼容性。

如果你真的想这样做,那么没有什么可以阻止你编写一个你在main中实例化的类,然后调用main方法。

答案 3 :(得分:5)

C ++在C#和Java中没有要求每一段代码都必须属于某种描述的类。 C ++允许使用独立功能,而main属于此类。

因此main属于 no 类。

当然,您可以创建一个包含main函数的类,但不会是 主要函数在程序上自动调用的类开始:

#include <iostream>

class SomeClass {
public:
    SomeClass() {
        std::cout << "In SomeClass constructor\n";
    }
    ~SomeClass() {
        std::cout << "In SomeClass destructor\n";
    }
    static int main() {
        std::cout << "In SomeClass main\n";
        return 0;
    }
};

int main() {
    std::cout << "In real main\n";
    { SomeClass xyzzy; } // Just to ensure destructor called before main exit.
    std::cout << "Exit real main\n";
}

其输出显示main的类变体未被调用:

In real main
In SomeClass constructor
In SomeClass destructor
Exit real main

答案 4 :(得分:2)

在C ++中,main()是一个在程序运行时调用的函数,它不是一个方法。这个main函数可以在执行时使用类的类和方法。

方法是在类中定义的函数,这些函数旨在与它们所定义的类/对象保持接近。因此,main()不会卡在类中,因为它不是要对单个类或对象进行操作< / p>

答案 5 :(得分:2)

C ++旨在并且应该向后兼容C和cfront (如果不允许使用main,那么第一个C ++编译器就不会有效。)

第一个/原始C ++编译器,称为cfront,通过转换编译C ++ 它到C,C语言需要使用main()

有关详细信息,请参阅以下网址:

http://en.wikipedia.org/wiki/Cfront

http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/

答案 6 :(得分:1)

main与C ++中的类无关。链接程序知道这是应用程序的入口点(地址)的保留函数名称

http://www.cplusplus.com/doc/tutorial/program_structure/