重複の可能性:
C++: public\private 継承のオーバーライド
class base {
public:
virtual void doSomething() = 0;
};
class derived : public base {
private: // <-- Note this is private
virtual void doSomething()
{ cout << "Derived fn" << endl; }
};
今、私が次のことをすると:
base *b = new child;
b->doSomething(); // Calls the derived class function even though that is private
質問:
- プライベートでも派生クラスの関数を呼び出すことができます。これはどのように可能ですか?
継承アクセス指定子を public から protected/private に変更すると、コンパイル エラーが発生します。
'type cast' : conversion from 'Derived *' to 'base *' exists, but is inaccessible
注: 継承アクセス指定子の概念は認識しています。したがって、2 番目のケースでは、プライベート/保護されているため、アクセスできません。しかし、最初の質問への答えが気になります。どんな入力でも大歓迎です。