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

问一个关于C++问题,对于实例化一个类的所有对象,这些对象有各自的地址(指向成员变量),但是共享一份成员函数地址。但是对于一个子类,它从父类继承的成员函数,是在父类成员函... 问一个关于C++问题,对于实例化一个类的所有对象,这些对象有各自的地址(指向成员变量),但是共享一份成员函数地址。但是对于一个子类,它从父类继承的成员函数,是在父类成员函数空间,还是在子类的成员函数空间(从父类复制过来)?我一直搞不懂,子类是怎么寻找到父类的成员函数的,希望大神能帮我解答下,谢谢。 展开
 我来答
157F
2015-08-22
知道答主
回答量:35
采纳率:0%
帮助的人:11.1万
展开全部

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

更多追问追答
追问
我知道你说的是虚函数表,我的问题是derived是怎么调用父类f3的,f3存在哪?
追答
直接调用Base::f3()
在在父类成员函数空间
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式