为什么使用构造函数而不是函数?

Raf*_*Mir 9 c++ constructor function

这是一个非常基本的问题,我搜索了它,但我只是想问这个社区我们有两个constructorsmethods.但通常我们使用构造函数来初始化变量而不是方法.我认为两者都可以用来初始化变量.那么两者之间的基本区别是什么.有什么可靠的理由吗?这是一个非常基本的问题,所以请为初学者级别考虑.提前致谢..

Dou*_* T. 6

最重要的区别:当你实例化一个对象时,它的构造函数将被调用,而调用一个方法总是可选的.因此,您可能忘记调用初始化方法,并且无法正确初始化所有内容.

例如,实例化对象的所有这些常规方法都将调用构造函数

Foo* p = new Foo();
Foo p;
Run Code Online (Sandbox Code Playgroud)

或者,如果您有必需的参数,请不要定义默认构造函数,而是需要使用参数构造:

class Foo
{
private:
   Foo();
public:
   Foo(int param1, double param2)
};
Run Code Online (Sandbox Code Playgroud)

这样做的好处是在你实例化类之前需要参数.所以你被迫做:

Foo* p = new Foo(1, 5.0);
Run Code Online (Sandbox Code Playgroud)

并且无法使用有效参数构造成为编译器错误:

Foo* p = new Foo(); // compiler error
Run Code Online (Sandbox Code Playgroud)

因此,只要有可能,总是错误地在构造函数中进行初始化.在某些情况下,构造函数可能不可行.例如,构造函数失败的唯一方法是使用异常.构建失败可能是"例行的",而不是真正特殊的.在某些体系结构上,异常也可能是昂贵的.另一种情况可能是您希望确保虚拟方法完全绑定,只有在构造之后才能保证为真.