如何调用 class 的默认构造函数,其构造函数由具有所有默认参数的 ctor 提供?
How to invoke a class's default constructor whose one is provided by a ctor with all default paramters?
在C++ primer 5Th版中说,为所有参数提供默认参数的构造函数也定义了默认构造函数:
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)
但我得到的是后者而不是默认构造函数?!
那么是否可以调用一个为所有参数提供默认实参的构造函数提供的class的默认构造函数?谢谢。
如果添加默认所有参数的构造函数,它是默认构造函数。
如果您需要两者,请删除一个或多个默认参数。
一个class最多可以有一个默认构造函数。如果带参数的构造函数是默认构造函数,则可能不存在不带参数的默认构造函数。否则默认构造函数的调用是不明确的。
So is it possible to invoke the default constructor of a class provided by a constructor that provides default arguments for all the parameters?
嗯,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。示例:
class Point {
public:
Point(int x = 0, int y = 0);
};
int main(){
Point pt; // the default constructor Point(int,int) is invoked
}
在C++ primer 5Th版中说,为所有参数提供默认参数的构造函数也定义了默认构造函数:
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)
但我得到的是后者而不是默认构造函数?!
那么是否可以调用一个为所有参数提供默认实参的构造函数提供的class的默认构造函数?谢谢。
如果添加默认所有参数的构造函数,它是默认构造函数。
如果您需要两者,请删除一个或多个默认参数。
一个class最多可以有一个默认构造函数。如果带参数的构造函数是默认构造函数,则可能不存在不带参数的默认构造函数。否则默认构造函数的调用是不明确的。
So is it possible to invoke the default constructor of a class provided by a constructor that provides default arguments for all the parameters?
嗯,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。示例:
class Point {
public:
Point(int x = 0, int y = 0);
};
int main(){
Point pt; // the default constructor Point(int,int) is invoked
}