在C ++入门手册第5版中,有人说,为所有参数提供默认参数的构造函数也定义了默认构造函数:
class Point {
public:
//Point(); // no need to define it here.
Point(int x = 0, int y = 0) : x_(x), y_(y){
std::cout << "Point(int=0, int=0)" << std::endl;
} // synthesize default constructor Point()
int x_;
int y_;
};
int main(){
Point pt; // default ctor Point() or Point(int, int)?
Point pt2 = Point(); // this won't compile?!
}
从上面可以看到,出于某种原因,我想调用默认构造函数Point()
而不是Point(int, int)
,但是我得到的不是默认的ctor吗?
那么是否可以调用由为所有参数提供默认参数的构造函数提供的类的默认构造函数?谢谢。
答案 0 :(得分:8)
如果添加默认所有参数的构造函数,则是默认构造函数。
如果两者都需要,请删除一个或多个默认参数。
答案 1 :(得分:8)
一个类最多可以具有一个默认构造函数。如果具有参数的构造函数是默认构造函数,则可能不存在不带参数的默认构造函数。否则,默认构造函数的调用将不明确。
是否可以调用由为所有参数提供默认参数的构造函数提供的类的默认构造函数?
是的,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。示例:
class Point {
public:
Point(int x = 0, int y = 0);
};
int main(){
Point pt; // the default constructor Point(int,int) is invoked
}