#include<iostream>
using namespace std;
class A
{
public:
virtual void print(){cout<<"This is A."<<endl;}
};
class B : public A
{
public:
B(){data=https://bbs.csdn.net/topics/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 的地址相同),求大神詳細解釋一下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84660.html
標籤:基礎類
上一篇:關于DBGrid 滾動條的問題
下一篇:紅黑樹與平衡二叉樹的區別
