class Base
{
private:
int var;
};
class Child : protected Base
{
void someFunc()
{
var = 5; // Error: Base::var is private
}
};
那有什么不对?
答案 0 :(得分:4)
答案 1 :(得分:3)
你错误地试图从另一个不是朋友的班级访问私人变量。
简单的方法是使var
受保护而不是私有,但这会引入额外的依赖。通常,变量应该是私有的。 Stroustrup在他的“C ++的设计和演变”一书中,遗憾地介绍了protected
。他认为受保护的数据是对问题的邀请,根据他的经验,这是没有必要的。通过任何声明的子类打开数据成员进行任意操作实际上并不比将它们公开更好。
当想要使用受保护的数据成员时,您应该问问自己,您真正想要实现的目标。这显然是一个构造的例子。如果Child
有某些原因需要修改var
,那么这个原因可以用函数名表达,受保护的函数也不如受保护的数据成员那么糟糕。
答案 2 :(得分:0)
即使使用protected
或private
继承,您也无法访问父类中private
成员的使用。
如果您确实需要直接访问它们,请将它们设为protected
。
编辑:dang,殴打它。
答案 3 :(得分:0)
您已在var
中声明Base
拥有私人访问权限。私有意味着只有这个类可以看到该变量,而不是子类。
我认为在这种情况下你可能想要受保护的访问:protected意味着这个类和任何子类都可以看到它。
编辑:Dang,也被打败了。