C++不能使用从基类继承的getter函数

Posted

技术标签:

【中文标题】C++不能使用从基类继承的getter函数【英文标题】:C++ Cannot use getter function inherited from base class 【发布时间】:2018-08-29 05:56:59 【问题描述】:

我可以从Sedan 类中访问Vehicle::color 的唯一方法是重新实现getter 方法。我想从子类中访问它,而不这样做。

// Base Class
class Vehicle

protected:
    bool windowIsOpen[4];
    int  wheels;
    char *color;

public:
Vehicle(char *color) : color(color);
char *getColor()  return color; 
;

class Sedan : Vehicle

public:
    Sedan(char* color) : Vehicle(color) 
;

int main(int argc, char **argv)
    Sedan se("green");
    cout<<se.getColor()<<endl;
    return 0;

【问题讨论】:

getColor()返回颜色; 这似乎是一个错字。你需要使用public继承class Sedan : public Vehicle ...; 无论如何是提供setter和getter而不是原始受保护变量的更好方法,但这不是问题的重点 【参考方案1】:

在定义你的类时,你写了class Sedan : Vehicle。这实际上与class Sedan : private Vehicle 相同。换句话说,Vehicle 是一个不暴露给 Sedan 用户的实现细节。要进行这个公共继承,你应该写class Sedan : public Vehicle

【讨论】:

我明白了,我没有意识到默认情况下继承是私有的。 class的继承默认为privatestruct的默认继承为public 它适用于类,而不适用于结构。

以上是关于C++不能使用从基类继承的getter函数的主要内容,如果未能解决你的问题,请参考以下文章

C++派生类是不是可以从基类继承静态数据成员和静态成员函数?

C++ - 无法从基类继承 |给出空值

C++ - 让派生类从基类“继承”重载赋值运算符的安全/标准方法

C++ 容器与继承

Qt - 从基类继承一个类

使用纯多态性和继承从基类调用派生类上的函数而不进行强制转换?