问一个关于C++问题,对于实例化一个类的所有对象,这些对象有各自的地址(指向成员变量),但是共享一

问一个关于C++问题,对于实例化一个类的所有对象,这些对象有各自的地址(指向成员变量),但是共享一份成员函数地址。但是对于一个子类,它从父类继承的成员函数,是在父类成员函数空间,还是在子类的成员函数空间(从父类复制过来)?我一直搞不懂,子类是怎么寻找到父类的成员函数的,希望大神能帮我解答下,谢谢。

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的成员函数调用更简单,直接从父类函数里找