サンプル
class
Base {
public
:
void
fnc();
};
class
Derived:
public
Base {
public
:
void
fnc(){}
};
int
main(){
Derived d;
Base *basePtr = &d;
Derived *derivedPtr = &d;
basePtr->fnc();
//
Base::fnc() を呼び出します
derivedPtr->fnc();
//
Derived::fnc() を呼び出します
return
0;
}
ソリューション
非仮想関数をオーバーライドしないでください。 基本クラスを使用しないように設計を変更するか、ポリモアフィックな振る舞いになるように、基本クラス関数を virtual にします。
class
Base {
public
:
virtual
void
fnc();
};
class
Derived:
public
Base {
public
:
void
fnc(){}
};
int
main(){
Derived d;
Base *basePtr = &d;
Derived *derivedPtr = &d;
basePtr->fnc();
//
Derived
::fnc() の呼び出し
derivedPtr->fnc();
//
Derived::fnc() の呼び出し
return
0;
}