final
機能に問題があります。私はクラス内の多型を "停止"したいが、私はまだ派生クラスで同じ関数を生成したい。最終的な関数を継承するが、同じ関数(オーバーライドではない)を作成する派生クラスを持つことは可能ですか?
このような何か:
class Base{
protected:
int _x, _y;
public:
Base(int x = 0, int y = 0) : _x(x), _y(y){};
int x() const { return _x; }
int y() const { return _y; }
virtual void print()const{ cout << _x*_y << endl; }
};
class Derived : public Base{
public:
Derived(int x = 0, int y = 0) : Base(x, y){}
void print()const final { cout << _x*_y/2.0 << endl; } // final inheritance
};
class NonFinal : public Derived{
void print()const{ cout << "apparently im not the last..." << endl }
// here i want a new function. not overriding the final function from Derived class
};
一般的に、継承されたメンバーを隠すコードでは、設計上のバグがあります(継承された仮想関数をオーバーライドするという明白な例外はあります)。 'NonFinal'でメソッドを何か呼び出すことをお勧めします。あなたがこれを行う必要があると分かった場合、OO設計に関する何かが悪いです。 – cdhowie