设为首页 加入收藏

TOP

c++ 多态的内幕(二)
2019-09-03 02:43:57 】 浏览:76
Tags:内幕
水面

当有如下代码:用父类的指针指向子类的对象(多态的最终目的:面对抽象类编程),然后调用子类和父类完全相同的函数(必须是虚函数)。让人迷惑,到底调用的是哪个。

A* m = new B(1,2,3,4);//B是A的子类
m->func();
m->func1();

用父类的指针调用虚函数时,先去它指向的内存中(子类所占用的内存)找_vptr,然后从_vptr里找函数的地址。非虚函数的地址不在_vptr里。

步骤1:【p *m】,发现m是类A的对象

步骤2:【set print object on】,含义是显示对象真正的类型

步骤3:【p *m】,发现m原来不是类A的对象,而是类B的对象。

步骤4:查看_vptr里第一个指针,发现指向的是B的func;加8后得到第二个指针,发现发现指向的是B的func1.

让虚函数们的地址存入_vptr里面的代码肯定是由编译器给我们加上的,这些代码加到哪里了呢?

加到了构造函数里

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BZOJ1799: [Ahoi2009]self 同类分.. 下一篇时间复杂度

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目