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()
を呼び出す必要があると判断してどのようにしますか?通常の関数からの仮想関数呼び出し