在 C++ 中,我们为什么不将 main 方法放在一个类中(如 Java)?为什么这样做没有意义(我认为)?
8 回答
我们可以。main
不是保留字。但是按照语言标准,C++ 工具链期望程序的入口点main
在全局范围内。所以main
类内部不会被识别为程序的入口点。
随意定义一个名为的类方法main
,并从全局调用它main
。
这种设计完全来自 C。与现有 C 代码的兼容性是早期 C++ 的主要设计目标,更改入口点约定几乎没有任何实际好处。所以他们保留了 C 标准。正如大家所说,C++ 与 Java 不同,它完全允许独立(即非类)函数。
我们为什么要?为什么我们需要?
为了使类方法有意义,我们必须有一个对象的实例。当main
被调用时,我们没有实例。
所以它可以改为静态成员函数,但有什么意义呢?它是“更面向对象”吗?怎么会这样?
我认为 C++ 这样做的方式很有意义:在你有任何对象之前,在任何实例存在之前main
你就开始了。
在 Java 中,main
是一个静态成员,因为不存在其他任何东西。但是在 C++ 中,存在非成员函数,那么为什么不main
成为其中之一呢?
因为在远早于类的 C 中,它main
是一个独立的函数,并且在 C++ 中没有更改以保持兼容性。
如果你真的想这样做,没有什么能阻止你编写一个你实例化的类main
,然后调用一个main
方法。
C++ 没有要求,在 C# 和 Java 中发现,每段代码都属于某个描述的类。C++ 允许独立函数 amdmain
属于该类别。
因此不main
属于任何阶级。
当然,您可以创建一个包含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
C++ 旨在并且应该与 C 向后兼容,如果不允许 main,cfront(第一个 C++ 编译器)将无法工作。
第一个/最初的C++编译器,叫做cfront,通过将C++转换成C来编译C++,而C语言需要使用main()
有关详细信息,请参阅以下 URL:
http://en.wikipedia.org/wiki/Cfront
http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/
在 C++ 中,main() 是在程序运行时调用的函数,而不是方法。这个主函数可以在其执行中使用类和类的方法。
方法是在类中定义的函数,旨在与定义它们的类/对象保持接近。因此,main() 不会卡在类中,因为它不打算作用于单个类或对象
main 与 C++ 中的类无关。这是一个保留的函数名,链接器知道它是应用程序的入口点(地址)
由于 cpp 是从核心 c 演变而来的,因此两种语言的定义、声明和调用函数都遵循相同的过程......因为 cpp 是面向对象的,我们可以用它来玩类和对象的游戏......但是就像在 c 中一样,我们不能在任何用户派生函数中添加主方法,或者我们可以说主方法应该与函数隔离。同样在cpp中我们不能在任何类中添加主方法,它应该被隔离...在cpp中没有任何像驱动程序类这样的概念...在java中,是的!我们可以在类中添加main方法,或者我们必须在java中的类中添加main,我们可以说!!