尽管类继承,变量仍不可访问? [复制]
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,它允许派生类修改数据,但仍允许基类强制保证其内部状态。如果你让数据成员受到保护,那么你的派生类可以对它们做任何他们想做的事情,即使它破坏了基类的行为。以上是关于尽管类继承,变量仍不可访问? [复制]的主要内容,如果未能解决你的问题,请参考以下文章