首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何调用由具有所有默认参数的ctor提供的类的默认构造函数?

如何调用由具有所有默认参数的ctor提供的类的默认构造函数?
EN

Stack Overflow用户
提问于 2019-07-26 23:21:02
回答 2查看 396关注 0票数 4

在C++引物第5版中说,为所有参数提供默认参数的构造函数也定义了默认构造函数:

代码语言:javascript
运行
复制
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?!

那么,是否有可能调用为所有参数提供默认参数的构造函数所提供的类的默认构造函数?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 23:25:57

类最多可以有一个默认构造函数。如果具有参数的构造函数是默认构造函数,则可能没有不使用参数的默认构造函数。否则,默认构造函数的调用是不明确的。

那么,是否有可能调用为所有参数提供默认参数的构造函数所提供的类的默认构造函数?

嗯,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。示例:

代码语言:javascript
运行
复制
class Point {
    public:
        Point(int x = 0, int y = 0);
};

int main(){
    Point pt; // the default constructor Point(int,int) is invoked
}
票数 9
EN

Stack Overflow用户

发布于 2019-07-26 23:25:13

如果添加默认所有参数的构造函数,则该构造函数是默认构造函数。

如果两者都需要,请删除一个或多个默认参数。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57227936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档