问题描述
我正在做一个项目,它有一个抽象类 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
解决方法
如果我理解正确,您希望能够从继承的子类中修改 name
和 abbreviation
。为此,您应该将上述变量声明为 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'} {}