C++多态实现机制的分析

泽坤 2016-01-18 03:40:18
#include<iostream>

using namespace std;

class A
{
public:
virtual void print(){cout<<"This is A."<<endl;}
};

class B : public A
{
public:
B(){data=2;}
virtual void printB(){cout<<"This is B."<<endl;}
int data;
};

int main()
{
A a;
A b;
A* c = new A();
B d;
B e;
A* f=new B();
B* g=new B();

return 0;
}

代码如上,然后用gdb调试结果如下:

29 return 0;
(gdb) print a
$1 = {_vptr.A = 0x400bc0}
(gdb) print b
$2 = {_vptr.A = 0x400bc0}
(gdb) print *c
$3 = {_vptr.A = 0x400bc0}
(gdb) print d
$4 = {<A> = {_vptr.A = 0x400c10}, data = 2}
(gdb) print e
$5 = {<A> = {_vptr.A = 0x400c10}, data = 2}
(gdb) print *f
$6 = {_vptr.A = 0x400c10}
(gdb) print *g
$7 = {<A> = {_vptr.A = 0x400c10}, data = 2}
(gdb) quit
A debugging session is active.

不是所虚表是跟随对象的么,为什么定义了不同的对象,他们用的却是同一个虚拟指针表(同一个类型的对象的_vptr.A 的地址相同),求大神详细解释一下。
...全文
72 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧