C++ 我可以在派生类中使公共成员变量私有吗?
我想在派生类中将基类中的公共成员设置为私有,如下所示:C++ 我可以在派生类中使公共成员变量私有吗?,c++,class,inheritance,C++,Class,Inheritance,我想在派生类中将基类中的公共成员设置为私有,如下所示: 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替代和公共继承
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
完成。这意味着您不能隐藏公共方法
如果您试图隐藏公共字段
,那么您无能为力。要“隐藏”公共方法,可以执行以下操作:
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
};
是的,使用声明
技术上允许您这样做
您必须使用使用A::y
而不是使用y
但是,请认真评估这样做是否有设计意义
很少观察到:
您的类不应具有公共数据。这应该尽可能避免。如果您坚持这个设计原则,您可能不需要在派生类中将其设为私有
坚持。如果基类具有公共方法,并且除非您执行私有继承,否则如果派生类使用此类声明将基类方法设置为私有,则客户端将感到困惑
这感觉像是一个笨拙的设计。即使您可以为类B执行此操作,所有人需要做的就是向上转换到指向a的指针或引用,然后他们就可以访问该成员