尽管类继承,变量仍不可访问? [复制]

Posted

技术标签:

【中文标题】尽管类继承,变量仍不可访问? [复制]【英文标题】:Variable inaccessible despite class inheritance? [duplicate] 【发布时间】:2013-06-09 07:03:53 【问题描述】:

我很难理解为什么变量 engineNum 无法从类 Pickup 的函数中访问。我的基本理解是,如果类是继承的,那么私有变量应该是可访问的。这不是我发现的情况:

class Truck

private:
    string model;
    Truck() ;
    static int TruckEngineNum;
    int engineNum;
public:
    Truck(const string& model) 
    
        this->model = model;
        engineNum = TruckEngineNum++;
    ;

    string getModel() 
    
        return model;
    
    int getEngineNum() 
    
        return engineNum;
    
;
int Truck::TruckEngineNum = 100;

class Pickup : public Truck

public:
    Pickup(const string& model) : Truck(model) 
    
        if((engineNum % 2) == 1) engineNum++; ;
    
;

【问题讨论】:

***.com/questions/860339/… @元对!现在这是有道理的。谢谢! 【参考方案1】:

private 变量不能被派生类访问。如果您想访问它,您需要将其声明为protected

此外,如果您打算将Truck 类用作多态基类,则应声明virutal 析构函数。

【讨论】:

信不信由你,这是我的第一个想法,我确实更改了代码以反映这一点。使用(在任何情况下)受保护而不是私有是不好的做法吗? 视情况而定。经验法则是将所有内容都设为私有,除非您绝对不能这样做。如果您确实需要在派生类中访问该变量,那么将其设置为受保护 - 只需意识到它将更多类耦合在一起,因此对基类进行某些修改将更加困难。 通常你希望成员变量在所有情况下都是私有的,即使你需要在派生类中访问。如果您确保拥有一个公共 getter 和一个受保护的 setter,它允许派生类修改数据,但仍允许基类强制保证其内部状态。如果你让数据成员受到保护,那么你的派生类可以对它们做任何他们想做的事情,即使它破坏了基类的行为。

以上是关于尽管类继承,变量仍不可访问? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

5继承与派生2-访问控制

C++_练习—继承_公有继承

子类和继承

子类从父类继承过来的方法可以操作子类自己定义的成员变量吗

基类不可访问错误,为啥私有继承会这样做?

有没有办法确保继承的成员在派生类中不可访问,同时仍然保持公共继承的好处?