小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

虛函數(shù)布局

 jijo 2009-05-25
c++虛函數(shù)表詳解收藏

編譯器將虛函數(shù)表在編譯時(shí)存放在對(duì)象的頭部,因此我們可以自由的訪問虛函數(shù)。
1. 訪問對(duì)象的數(shù)函數(shù)表。
比如有這樣一個(gè)類:
class A
{
public:
 virtual int test1()
 {
  printf("A::test1\n");
  return 0;
 }

 virtual int test2()
 {
  printf("A::test2\n");
  return 0;
 }

 virtual int test3()
 {
  printf("A::test3\n");
  return 0;
 }
};

// 創(chuàng)建A的對(duì)象a
A a;

通過查找虛函數(shù)表來訪問該對(duì)象的虛函數(shù):
typedef int (* FUNC)(void);

FUNC func = (FUNC)*(int *)*((int *)&a + 0);
func();

func = (FUNC)*((int *)*(int *)&a + 1);
func();

func = (FUNC)*((int *)*(int *)&a + 2);
func();

對(duì)象a的虛函數(shù)表布局
A::test1 A::test2 A::test3

2. 子類重載了父類的虛函數(shù)。
比如:
class B:public A
{
public:
 virtual int test1()
 {
  printf("B::test1\n");
  return 0;
 }
};

那么對(duì)象b的虛函數(shù)表布局應(yīng)該是:
B::test1 A::test2 A::test3

3. 子類沒有重載父類的虛函數(shù)
比如:
class B:public A
{
public:
 virtual int test4()
 {
  printf("B::test4\n");
  return 0;
 }
};
那么對(duì)象b的虛函數(shù)表布局應(yīng)該是:
A::test1 A::test2 A::test3 B::test1

4. 多重繼承,有重載。
比如:
class A
{
public:
 virtual int test1()
 {
  printf("A::test1\n");
  return 0;
 }

 virtual int test2()
 {
  printf("A::test2\n");
  return 0;
 }

 virtual int test3()
 {
  printf("A::test3\n");
  return 0;
 }
};

class C
{
public:
 virtual int test1()
 {
  printf("C::test1\n");
  return 0;
 }

 virtual int test4()
 {
  printf("C::test4\n");
  return 0;
 }
};

class B:public A, public C
{
public:
 virtual int test1()
 {
  printf("B::test1\n");
  return 0;
 }
};

那么對(duì)象b的虛函數(shù)表布局應(yīng)該是:
B::test1 A::test2 A::test3
B::test1 C::test4

5. 多重繼承,沒有重載。
class B:public A, public C
{
public:
 virtual int test5()
 {
  printf("B::test5\n");
  return 0;
 }
};

那么對(duì)象b的虛函數(shù)表布局應(yīng)該是:
A::test1 A::test2 A::test3 b::test5
C::test1 C::test4

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多