【发布时间】:2013-11-18 07:22:27
【问题描述】:
假设我们有两个类,Base 和 Derived。有两种方法,getX 和 setX,它们是公共的,并使用受保护的 int x 与用户交互。 Base 构造集 x 为 1,Derived 构造集 x 为 3。
class Base {
public:
Base();
int getX();
void setX(int n);
protected:
int x;
}
int Base::getX() {
return x;
}
void Base::setX(int n) {
x = n;
}
Base::Base() : x(1) {
}
class Derived : public Base {
public:
Derived();
}
Derived::Derived() : x(3) {
}
Derived 类可以完全访问 Base 中的方法。太好了。
假设出于某种原因,我不希望 setX 对 Derived 类的用户可用。我想到了几种方法。
1) 将 setX 重新声明为 Derived 中的私有,因此阴影会阻止用户完全访问该方法。
2) 将 x 重新声明为 Derived 中的私有 const int。但是,这会导致 setX 和 getX 与 Base::x 一起工作。
3) 将 Base::setX 设为虚函数,将 Derived::setX 设为不做任何事情的函数。
最好的处理方法是什么?
【问题讨论】:
-
您应该创建一个
Base(int n)构造函数,然后您可以执行Derived::Derived() : Base(3) {},因为现在您的代码无法编译。 -
如果您使用方法 1,可能会以冗长的方式访问隐藏函数:
Derived d; d.Base::SetX(9);- 这种可能性是否适合您的设计,或者您是否也想阻止它?
标签: c++ inheritance