我对虚拟功能有点困惑。
假设您有带有虚函数 foo() 的基类,然后该函数在派生类中被覆盖
class Baseclass
{
public:
virtual void foo()
{
//...
}
};
class Derived: public BaseClass
{
private:
int member_val;
public:
Derived( int init )
: member_val( init )
{}
void foo()
{
member_val++;
}
};
和 foo 使用派生类的成员值,当我编写此代码时
Derived d( 10 );
Base* bPtr = &d;
bPtr->foo();
foo() 调用派生类,因为 _vptr 指向“派生类虚拟表”,而“派生类虚拟表”中的指针指向派生类的 foo(),但是它如何找到 member_val,导致基指针不知道关于它。什么“this”从 Derived 类传递给 foo()。我们称它为 Base*(这是 Base 类型),但要找到 member_val,我们需要 Derived*(此 Derived 类型)。那么它是如何在引擎盖下工作的呢?