【问题标题】: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++; };
    }
};

【问题讨论】:

标签: c++ class inheritance


【解决方案1】:

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

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

【讨论】:

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