Base2 つのクラスがあるとしましょうDerived。getXpublic でありsetX、保護された intを使用してユーザーとやり取りする と の2 つのメソッドがありxます。Baseコンストラクションはx1 に設定され、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 関数を作成します。
これを処理する最良の方法は何ですか?