14

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

4

8 回答 8

27

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

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

这种设计完全来自 C。与现有 C 代码的兼容性是早期 C++ 的主要设计目标,更改入口点约定几乎没有任何实际好处。所以他们保留了 C 标准。正如大家所说,C++ 与 Java 不同,它完全允许独立(即非类)函数。

于 2012-07-10T19:31:03.077 回答
23

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

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

所以它可以改为静态成员函数,但有什么意义呢?它是“更面向对象”吗?怎么会这样?

我认为 C++ 这样做的方式很有意义:在你有任何对象之前,在任何实例存在之前main你就开始了。

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

于 2012-07-10T19:44:07.500 回答
10

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

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

于 2012-07-10T19:30:31.313 回答
6

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
于 2020-11-26T06:23:32.410 回答
3

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/

于 2012-07-10T21:38:00.617 回答
2

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

方法是在类中定义的函数,旨在与定义它们的类/对象保持接近。因此,main() 不会卡在类中,因为它不打算作用于单个类或对象

于 2012-07-10T19:43:17.807 回答
1

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

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

于 2020-11-26T06:23:08.087 回答
0

由于 cpp 是从核心 c 演变而来的,因此两种语言的定义、声明和调用函数都遵循相同的过程......因为 cpp 是面向对象的,我们可以用它来玩类和对象的游戏......但是就像在 c 中一样,我们不能在任何用户派生函数中添加主方法,或者我们可以说主方法应该与函数隔离。同样在cpp中我们不能在任何类中添加主方法,它应该被隔离...在cpp中没有任何像驱动程序类这样的概念...在java中,是的!我们可以在类中添加main方法,或者我们必须在java中的类中添加main,我们可以说!!

于 2021-11-20T18:09:49.390 回答