<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C++多態、繼承的簡單分析

      一直以為自己對多態和繼承已經比較了解,當遇到虛繼承的時候,發現有點犯暈,想不通了,于是在微博上向幾個大神請教,很快得到了他們的回復,高興之情無以言表。之后自己查了一些資料,結合大神的回復,在這里做一下簡單的記錄。

      我的問題如下:

      為什么虛繼承類的sizeof要大些啊,是因為虛繼承中,子類有指向父類的指針和指向父類的虛函數表的指針嗎,比非虛繼承多了這兩個指針? @左耳朵耗子 @簡悅云風 @GeniusVczh

       

      @GeniusVczh:調用的時候給的this和函數實際需要的this的指針不一定是一樣的,多重繼承的時候已經這樣了。再加上你還有virtual繼承,所以需要很多描述。

      V福爾摩斯 回復 @GeniusVczh:看了B(第三個圖中的B)的內存布局,的確有vfptr和vbptr兩個指針

      簡悅云風:和編譯器實現有關。實現上虛繼承更象是組合,因為它可以被菱形繼承而只有一份,所以加上一個額外指針引用這個對象。沒有虛函數時不生成虛表,所以 2 里就是 a 對象加額外指針。3里面 b 有虛表,就再加一個虛表指針。字數不夠不吐槽了。

      左耳朵耗子:1) int a :4字節;2)虛函數增加一個虛表指針:4字節。3)虛繼承還會增加一個指針:4字節。但是為什么最后會是16個字呢?你是在用VC++吧?看一下我的這篇文章(http://t.cn/a1lMjd 最后一個示例)你會知道VC++的對象布局是有點詭異。G++下應該是正常的。

      看了簡悅云風左耳朵耗子兩個大神的回復之后,自己覺得還是有點暈,于是看了一下《Effective C++》和《More Effective C++》,在這里做一下記錄。

       

      多態的實現原理

      1:含有虛方法的類都有一個虛函數表

      2:子類的虛方法會覆蓋父類對應的虛方法

      3:含有虛方法的類的每個實例都有一個指向虛方法表的指針,如果虛繼承的話可能會有多個

      4:根據3中的指針調用虛方法表中對應的虛方法

      多態的實現差不多就是上面幾點。面試中經常遇到的就是調用哪個方法的問題,一句話告訴你是怎么調用的:在繼承關系中,非虛方法調用指針類型的方法;虛方法調用指針所指的對象類型的方法。非虛方法和默認參數都是靜態綁定,在繼承關系中只跟指針類型有關,跟指針所指的對象的實際類型無關。還有一點就是非虛方法就像C方法一樣,不用太在意,證明非虛方法就像C方法的一個方式就是,用一個空指針調用一個非虛方法,只要這個對象沒有用到對象的數據,就不會有任何問題。

      再來看看我發問的哪個圖,為什么圖3中sizeof(B)=16,于是用VS自帶的工具看了一下B的內存布局,如下圖:

      查看對象內存布局的VS命令:cl [filename].cpp /d1reportSingleClassLayout[className]

      看到這個圖,其實還是不太好理解,int a占4字節,B有自己的虛函數表,虛函數指針占4字節,另外多出一個vfptr和vbptr,那就只能這樣理解了:vfptr指向父類的虛函數表,B每多虛繼承一個類,就多一個vfptr,不信你可以試試,vbptr指向A,但是每多虛繼承一個類,并不多出一個vbptr,這是和解呢?

      @pop_Atry:干嘛不把B到A的偏移量放到虛表里面,何必為每個對象添加一個額外引用?

      @簡悅云風:回復@pop_Atry: 1. 性能原因; 2.有的編譯器的確是放偏移量的.

      風神一語中的,但如果不按照@pop_Atry,就是我們現在看到的,B變大了。

      妹的,不同的編譯器有不同的實現,咋們討論這個問題有什么意義呢,千萬不要把不同編譯器編譯的代碼放到同一個程序中啊,啊哥。

      虛擬繼承的出現就是為了解決重復繼承中多個間接父類的問題的,保證每個父類都只有一份。

      Effective C++的作者建議盡量避免多繼承,如果不能避免也要避免菱形繼承,各種莫名其妙的復雜啊。所以說多繼承也就算了,還許多(虛多)繼承,那就要搞死人了。

      更多了解請看左耳朵耗子的相關博客:http://blog.csdn.net/haoel/article/details/3081385

      posted @ 2013-05-15 10:20  古文觀芷  閱讀(3749)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 人妻精品久久无码区| 少妇激情a∨一区二区三区| 国产亚洲精品久久777777| 一区二区三区国产综合在线| 重口SM一区二区三区视频| 成年女人片免费视频播放A| 国语精品国内自产视频| 国产精品老熟女露脸视频| 国产剧情视频一区二区麻豆 | 国产精品最新免费视频| 综合偷自拍亚洲乱中文字幕| 午夜亚洲国产理论片二级港台二级| 色婷婷狠狠久久综合五月| 精品一区二区三区少妇蜜臀| 无码人妻丝袜在线视频| 亚洲香蕉网久久综合影视| 精品国产美女av久久久久| 日韩蜜桃AV无码中文字幕不卡高清一区二区 | 一区二区在线观看成人午夜| 亚洲精品动漫免费二区| 好男人好资源WWW社区| 日韩精品久久不卡中文字幕| 97se亚洲综合自在线| 亚洲精品国产综合麻豆久久99| 国产精品一码在线播放| 国产成人高清精品亚洲| 四虎网址| 日韩久久久久久中文人妻| 狠狠色噜噜狠狠狠狠2021| 亚洲精品国产综合久久一线| 国产精品一区二区久久岳| 国产免费无遮挡吃奶视频| 国产成人精品无码播放| 偷拍美女厕所尿尿嘘嘘小便| 精品 日韩 国产 欧美 视频| 精品国产粉嫩一区二区三区| 亚洲卡1卡2卡新区网站| 高青县| 亚洲成人网在线观看| 欧美白妞大战非洲大炮| 99久热在线精品视频|