如何避免使用默认参数的构造函数中的歧义?

时间:2016-11-02 17:21:59

标签: c++

假设我有一个class Point,它可以用直角坐标和极坐标构造。而且我想要有默认参数,这将在坐标(0,0)中创建Point

所以,我想要一些代码:

Class Point{
 public:
    Point(double x = 0, double y = 0); // Rectangular coordinates
    Pount(double r = 0, double a = 0); // Polar coordinates (radius and angle)
    ...
}

但显然这是一个糟糕的决定,因为我们甚至无法拨打电话Point()。因此,作为解决方法,我们可以使用非默认的第一个参数(即仅int x, ...)构建一个构造函数。但是,如果我们只想指定x,那么我们再次得到关于歧义的错误。

如何正确设计这样的构造函数?

1 个答案:

答案 0 :(得分:0)

在这种情况下,使用GOF的Builder模式是有意义的。

像这样,

BubbleBulder bb;
bb.setGeomtery(x, y, radius); // or separate setters for each members
bb.setColor(new Color(0, 0 ,0));
std::unique_ptr<Bubble> bubblePtr = bb.createInstance(); // or move