在dynamic binding
中,函数调用根据指针指向的对象类型绑定到函数实现。
假设我们有以下代码:
base *bptr = new derived;
bptr->func();
让函数func
在基类中声明为虚拟的。func
然后,由于动态绑定,派生类的虚函数版本将在运行时被调用。
我理解上面的概念。
但是我在研究了上述概念后对以下概念感到困惑。
在上面的代码片段中,指向派生类对象的指针被隐式转换为指向基类对象的指针。那么bptr
将实际指向派生类对象的基类子对象,而不是指向派生类对象。
由于基类指针bptr
指向基类子对象,在运行时不应该func
调用基类的虚函数版本吗?