是否有一种自动方式来初始化私有变量 - 而不是将它们作为构造函数参数接受?

时间:2015-06-27 04:18:45

标签: c++ class visual-c++

我正在尝试使用构造函数来初始化一个私有变量,但在查看代码时,这看起来很烦人且重复。

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;
};

2 个答案:

答案 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;
};