默认和参数化构造函数

anu*_*294 0 c++

这个陈述是否正确,声明带参数的构造函数会隐藏默认构造函数,并且您无法调用默认构造函数.

sha*_*oth 8

不完全是.相反,它会抑制编译器提供的默认构造函数的生成.考虑:

class Class1 {
};
Run Code Online (Sandbox Code Playgroud)

Class1将有一个编译器生成的默认构造函数,所以你可以调用new Class1()while

class Class2 {
    Class2( int );
}
Run Code Online (Sandbox Code Playgroud)

将没有编译器生成的默认构造函数.所以你不能调用new Class2()除非你明确声明一个默认构造函数Class2:

class Class2 {
public:
    Class2();
    Class2( int );
}
Run Code Online (Sandbox Code Playgroud)