我正在尝试使用构造函数来初始化一个私有变量,但在查看代码时,这看起来很烦人且重复。
class Parent
{
public:
Parent(string _name, string _eyecolor, string _skincolor, string _gender, int _age)
{
// Cluttered
_name = name;
_eyecolor = eyecolor;
_skincolor = skincolor;
_gender = gender;
_age = age;
}
private:
string name, eyecolor, skincolor, gender;
int age;
};
答案 0 :(得分:1)
没有办法自动初始化成员变量。如果你考虑一下,如果有的话,这将是可怕的。编译器如何知道你想要用?
初始化变量正如其他人所说,你并没有真正初始化成员。你甚至都没有为他们分配任何东西。您可以在此处将成员变量分配给构造函数的参数。查找在构造函数中初始化成员变量的语法。它可能是这样的,购买可能格式化,但你喜欢它(我在平板电脑上,所以我不能很好地格式化它)。
class Parent {
public:
Parent(string _name, string _eyecolor, string _skincolor, string _gender, int _age)
: name{ _name }, eyecolor{ _eyecolor }, skincolor{ _skincolor }, gender{ _gender }, age{ _age }
{
}
private:
string name, eyecolor, skincolor, gender;
int age;
};
如果你的意思是你想用一些(定义的)值初始化它们而不传递参数,你可以使用默认构造函数初始化它们,基本上与我上面的方法相同。
答案 1 :(得分:1)
您可以定义一个默认构造函数,它使用您在C ++ 11中定义的另一个构造函数:
class Parent
{
public:
Parent() :
Parent("Richard", "Pink", "Green", "Male", 777)
{}
Parent(string _name, string _eyecolor, string _skincolor, string _gender, int _age)
{
// Cluttered
_name = name;
_eyecolor = eyecolor;
_skincolor = skincolor;
_gender = gender;
_age = age;
}
private:
string name, eyecolor, skincolor, gender;
int age;
};
如果您的编译器不支持此功能,您可以随时手动执行此操作:
class Parent
{
public:
Parent() :
name("Richard"),
eyecolor("Pink"),
skincolor("Green"),
gender("Male"),
age(777)
{}
Parent(string _name, string _eyecolor, string _skincolor, string _gender, int _age)
{
// Cluttered
_name = name;
_eyecolor = eyecolor;
_skincolor = skincolor;
_gender = gender;
_age = age;
}
private:
string name, eyecolor, skincolor, gender;
int age;
};