假设我们有两个类,Base
并且Derived
. 有两种方法getX
和setX
,它们是公共的,使用受保护的 intx
与用户交互。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
为私有 const int in Derived
。但是,这会导致 setX 和 getX 与 Base::x 一起工作。
3) 使 Base::setX 成为虚函数,使 Derived::setX 函数什么都不做。
处理这个问题的最佳方法是什么?