在C ++中为什么我们不将main方法放在类中(如Java)?为什么这样做没有意义(我认为)?
答案 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 ++中的类无关。链接程序知道这是应用程序的入口点(地址)的保留函数名称