Base
2 つのクラスがあるとしましょうDerived
。getX
public でありsetX
、保護された intを使用してユーザーとやり取りする と の2 つのメソッドがあり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
でプライベート const int として再宣言しDerived
ます。ただし、これにより、setX と getX が Base::x で動作します。
3) Base::setX を仮想関数にし、何もしない Derived::setX 関数を作成します。
これを処理する最良の方法は何ですか?