从类继承变量

问题描述

我正在做一个项目,它有一个抽象类 A 和几个类,假设 B、C、D 类都从 A 类公开继承。

A 类有一堆 getter 和 setter 以及一些私有成员变量。

其中一个成员变量是名为 name 的字符串。

另外一个成员变量是一个叫做abbreviation的字符,它保存着名字字符串的第一个字符。

如何设置字符串和字符变量而不需要 getter 和 setter 在我编写的函数代码中命名它们。 我不想在程序运行开始时设置它们。

是否可以在它们的构造函数中设置它们? 例如:

// B constructor
B::B() {
name = "B is the name of this variable";
abbreviation = 'B';
}

提前致谢! :D

解决方法

如果我理解正确,您希望能够从继承的子类中修改 nameabbreviation。为此,您应该将上述变量声明为 protected 而不是 private

protected 方法和变量是只有类本身及其子类可以访问的成员。

现在,如果您对能够访问所述值的自由函数感兴趣,您应该将它们声明为 friend,这是一个示例:

class A{
    private:
        std::string name;
        char abbreviation;

        friend void func( A obj );
}

void func( A obj ){
    obj.name = "that's my name!";
    obj.abbreviation = 't';
}
,

如果您正在寻找的话,您应该能够使用构造函数初始值设定项列表来设置这些变量。然后,每次生成对象时,这些属性都将设置为其指定的默认值。

看这里https://en.cppreference.com/w/cpp/language/constructor 了解更多详情。

你会像这样使用它

B() : name{"B 是这个变量的名字"},缩写{'B'} {}