このようなことをするのは合理的ですか?
注:これは最小限の作業例です
class A {
public:
int getX() { return x; }
protected:
int x;
virtual void setX(int newX) = 0;
};
// Children can modify X
class Can_Modify_X : public A {
protected:
void setX(int newX) { x = newX; }
private:
using A::x;
};
// Children can't modify X
class Can_Not_Modify_X : public A {
private:
void setX(int newX) { }
using A::x;
};
Liskov Principleに違反するため、関数を単純に非表示にすることはできないことは承知していますが、private
継承を行ってすべてのパブリックメソッドを再度指定するのは本当に冗長に思えます。
2 つのクラスには共通の親が必要であり (それが直接の 1 つであっても)、x
直接変更できてはなりません。
using
ボーナス:誰かがこの場合の正確な動作を定義する場所を教えてもらえますか? 私はそれをグーグルで試しましたが、ほとんど成功しませんでした。