假设我有一个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,那么我们再次得到关于歧义的错误。
如何正确设计这样的构造函数?
答案 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