Visual Studio调滑高试看见过_vfptr之类的东西吗,就是那个
举个例子
class Base {
public:
virtual void f1();
virtual void f2();
void f3();
//...
};
class Derived : public Base {
public:
virtual void f1() override;
virtual void f4();
void f5();
//...
};
Base *base = new Base(), *derived = new Derived();Base的vfptr里有Base::f1(), Base::f2()的实铅改现
Derived的槐让判vfptr里有Derived::f1(), Base::f2(), Derived::f4()的实现
所以说子类继承的成员函数没有复制,而是和父类共用
derived->f1()相当于在Derived::_vfptr里找到f1的实现,然后调用
非virtual的成员函数调用更简单,直接从父类函数里找