[英]C++ public method inherited from base class can not access private member variable in derived class
[英]Can I make a public member variable private in a derived class?
我想将基类的公共成员设为派生类的私有成员,如下所示:
class A {
public:
int x;
int y;
};
class B : public A {
// x is still public
private:
// y is now private
using y;
};
但是显然“使用”不能那样使用。 有什么办法可以在C ++中做到这一点?
(我不能使用私有继承,因为A的其他成员和功能仍必须是公共的。)
简短的回答:不。 Liskov替代和公共继承的性质要求,您对A
(即其公共成员)所做的一切也可以由B
完成。 这意味着您无法隐藏公共方法。
如果您要隐藏公共fields
,则无能为力。 要“隐藏”公共方法,您可以执行以下操作:
class B {
// x is still public
int x() { return a.x(); }
private:
A a;
// y is now private since you didn't add a forwarding method for it
};
是的,使用声明在technically
允许您这样做。
您必须using A::y
而不是using y
但是,请认真评估这样做是否有意义。
很少观察到:
您的课程不应包含公开数据。 应该尽可能避免这种情况。 如果您遵循此设计原则,则可能无需在派生类中将其设为私有。
坚持LSP 。 如果基类具有公共方法,并且除非您正在进行私有继承,否则如果派生类使用声明使用此类将基类方法私有,则客户端将感到困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.