亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1566 | 回復(fù): 1
打印 上一主題 下一主題

關(guān)于C++虛基類的一個例子,求助! [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-11-11 01:22 |只看該作者 |倒序瀏覽
class A{
public:
        int a;
};
class B:virtual public A{
public:
        int b;
};
class C:virtual public A{
public:
        int c;
};
class D:public B, public C{
public:
        int d;
};
int main()
{
        D sam;
        A *pa = &sam;
        B *pb = &sam;
        C *pc = &sam;
        printf("sizeof A %d\n", sizeof(A));
        printf("sizeof B %d\n", sizeof(B));
        printf("sizeof C %d\n", sizeof(C));
        printf("sizeof D %d\n", sizeof(D));
        printf("pa:     %p\n&sam:   %p\n", pa,&sam);
        printf("pb:     %p\n", pb);
        printf("pc:     %p\n", pc);
        printf("*pc:    %p\n", *pc);//?
        printf("*pb:    %p\n", *pb);//?為什么不指向同一個虛基類?
        printf("&sam.a  %p\n", &sam.a);
        printf("&sam.b  %p\n", &sam.b);
        printf("&sam.c  %p\n", &sam.c);
        printf("&sam.d  %p\n", &sam.d);
        return 0;
}
輸出結(jié)果  sizeof A 4
sizeof B 12
sizeof C 12
sizeof D 24
pa:     0012FF60
&sam:   0012FF4C
pb:     0012FF4C
pc:     0012FF54
*pc:    00404314//?為什么*pc   *pb不指向同一個虛基類?
*pb:    0040431C//?為什么不指向同一個虛基類?
&sam.a  0012FF60
&sam.b  0012FF50
&sam.c  0012FF58
&sam.d  0012FF5C

=====================
我猜的是B和C類的對象都有一個指針指向基類子對象A,既然是虛繼承,應(yīng)該只有一個A。
所以猜*pc 和*pb應(yīng)該指向同一處(唯一的A類子對象)

問題如上注釋,我也不大深刻了解對象模型,求助大家是什么原因?謝謝了
(希望回答的不要是“自己翻翻深度探索C++對象模型”書)

[ 本帖最后由 bert1984 于 2008-11-11 01:24 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2008-11-11 08:57 |只看該作者
這個是和編譯器相關(guān)的,目前的gcc 和VS2005的實現(xiàn)上好像都沒有指向虛基類的指針吧,編譯器根據(jù)偏移就可以計算出虛基類的位置。虛基類A的位置應(yīng)該是在內(nèi)存模型中的最后面。差不多就是    | int b | int c | int d | int a |  ..當(dāng)然中間可能還夾雜了其它數(shù)據(jù)。具體要看編譯器。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP