在C ++中,我如何使用一个带有参数的类作为新类型来提供其构造函数,以在另一个类中声明一个变量(并使用第二个类的构造函数所采用的输入来提供第一个类的构造函数) ?)
我想要做的是如下所示但我不知道如何正确地执行Object类部分并且我不断收到错误(我不想从Color类派生Object类)
enum color_enum {red, blue, green, black};
class color
{
protected:
color_enum col;
public:
color(color_enum initval)
{
col = initval;
}
string str()
{
switch (col)
{
case red:
return "red";
case blue:
return "blue";
case green:
return "green";
case black:
return "black";
default:
return "N/A";
}
}
};
ostream &operator<< (ostream &out, color &inst)
{
out << inst.str();
return out;
}
class Object
{
public:
float objvolume;
float objmass;
string objname;
color objcolor(initval);
};
答案 0 :(得分:1)
使用初始化列表:
class Object {
public:
Object(color_enum initval) : objcolor(initval){}
// ^^^^^^^^^^^^^^^^^^^
//initialize objcolor with initval
//...
color objcolor;
};
...
Object o(red); //objcolor will be constructed with red as an argument
在C ++ 11中,您可以使用类内初始化并执行:
color objcolor{red};
这仅适用于默认值,而不是传递给构造函数的值。