【发布时间】:2016-11-03 02:34:03
【问题描述】:
假设我有一个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 步。不要使用默认参数。这是众多原因之一。
-
@CoryKramer 如果有充分的理由使用默认参数怎么办?
-
@CoryKramer 你能给出一些解释的链接吗? (了解其他原因,或者解释一下)
-
为什么要为此使用 2 个单独的构造函数?如果用户有单独的 RGB 值,他们可以简单地将
Color(r, g, b)传递给颜色参数。 -
@MrPisarik:这是一个完美的例子。解决方案是命名构造函数成语。 isocpp.org/wiki/faq/ctors#named-ctor-idiom
标签: c++