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

Is there an automatic way to initialize private variables - instead of accepting them as constructor arguments?

本文关键字:参数 构造函数 方法 一种 变量 初始化 是否      更新时间:2023-10-16

我正试图使用构造函数初始化一个私有变量,但在查看代码时,这似乎很烦人,而且重复性很强。

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

您可以定义一个默认构造函数,该构造函数使用您在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;
};

不,没有自动初始化成员变量的方法。如果你仔细想想,如果真的有,那就太可怕了。编译器如何知道您想要用什么初始化变量?

正如其他人所说,您实际上并没有初始化成员。你甚至没有给他们分配任何东西。您在这里将成员变量分配给构造函数的参数。在构造函数中查找初始化成员变量的语法。它可能是这样的,可以按照你喜欢的格式购买(我在平板电脑上,所以我不能很好地格式化它)。

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

如果你想用一些(定义的)值初始化它们而不传递参数,你可以用默认的构造函数初始化它们,基本上和我上面做的一样。