【发布时间】:2015-02-22 21:59:45
【问题描述】:
如何编写一个可以接受默认参数的构造函数?我是在声明私有数据成员时还是在构造函数内部声明默认参数?
Color class:
private:
int red;
int blue;
int green;
public:
Color(int r, int b, int g) {red = r; blue = b; green = g;}
Table class:
private:
double weight;
double height;
double width;
double length;
Color green;
public:
Table(double input_weight, double input_height, double input_width,
double input_length, Color green = green(0, 0, 60)){
weight = input_weight;
height = input_height;
width = input_width;
length = input_length;
}
我希望能够编写一个带有默认参数的构造函数。但我不知道如何写一个(上面的 Table 构造函数是我遇到问题的那个)。我想要一个具有不同重量、高度、宽度、长度的对象表,但所有表都是绿色的。 感谢您的帮助!
【问题讨论】:
-
green(0, 0, 60)没有意义。也许你的意思是Color(0, 0, 60)? (投票结束是一个简单的印刷错误) -
你能解释一下为什么它是颜色吗?我正在尝试将对象绿色初始化为 0、0、60。Color 不只是一种数据类型吗?
-
因为
Color(0, 0, 60)创建了一个 Color 对象,将 0、0 和 60 传递给它的构造函数。 (它也可以调用一个函数或函数指针,如果Color是一个,或者如果Color是一个带有operator()的对象,它会调用它,但这些都不是真的在这里)。 -
green不是类型、函数、函数指针或带有operator()的对象,所以不能调用它。 -
@jasonadams
Color(0, 0, 60)是一个没有名称的Color对象。Color blue(0, 0, 60)声明blue是一个名为blue的Color对象。blue和Color(0,0,60)都是Color对象;一个有名字,一个没有。green(0, 0, 60);以上都不是,是一个错误。当您提供默认值时,您必须提供一个表示Color对象的表达式。Color(0, 0, 60)会这样做,如果您之前在某处声明了blue,blue也会这样做(您不能提供声明作为默认值规范的一部分)
标签: c++ class constructor