class base
{
public:
void virtual func(){cout<<"base";}
void check()
{
func();
}
};
class derived: public base
{
public:
void func(){cout<<"dervied";}
};
int main()
{
base *obj = new derived();
obj->check();
return 0;
}
上記のコードは、コンソールから派生したものです。これで、仮想関数の概念は理解できましたが、ここでは適用できません。私の理解では、仮想関数を呼び出すときはいつでも、コンパイラがへの呼び出しを変更し、"this->vptr->virtualfunc()"
それが最も高度に派生したクラス関数が呼び出される方法です。しかし、この場合、check()
は仮想関数ではないため、コンパイラfunc()
は派生関数を呼び出す必要があるとどのように判断しますか?