最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的菱形繼承深入分析

 更新時間:2017年07月03日 16:06:07   投稿:lqh  
這篇文章主要介紹了C++中的菱形繼承深入分析的相關資料,需要的朋友可以參考下

菱形繼承

class Person 
{ 
  int _AA; 
}; 
class Student:public Person 
{ 
  int _BB; 
}; 
class Teacher :public Person 
{ 
  int _CC; 
}; 
class Assistant :public Student, public Teacher 
{ 
  int _DD; 
}; 


PS:

Assistant的對象中存在兩份Person成員

菱形繼承存在二義性和數(shù)據(jù)冗余

解決:

使用虛繼承

首先不使用虛繼承時:

#include<iostream> 
using namespace std; 
 
class AA 
{ 
public: 
  string _aa; 
}; 
class BB :public AA 
{ 
public: 
  int _bb; 
}; 
class CC :public AA 
{ 
public: 
  int _cc; 
}; 
class DD :public BB, public CC 
{ 
public: 
  int _dd; 
}; 
 
int main() 
{ 
  DD d; 
  d.BB::_aa = 1; 
  d.CC::_aa = 2; 
  d._bb = 3; 
  d._cc = 4; 
  d._dd = 5; 
  cout << sizeof(d) << endl; 
  return 0; 
} 


菱形繼承對象模型:

使用虛繼承時:

#include<iostream> 
using namespace std; 
 
class AA 
{ 
public: 
  string _aa; 
}; 
class BB :<span style="color:#FF0000;">virtual</span> public AA 
{ 
public: 
  int _bb; 
}; 
class CC :<span style="color:#FF0000;">virtual</span> public AA 
{ 
public: 
  int _cc; 
}; 
class DD :public BB, public CC 
{ 
public: 
  int _dd; 
}; 
 
int main() 
{ 
  DD d; 
  d.BB::_aa = 1; 
  d.CC::_aa = 2; 
  d._bb = 3; 
  d._cc = 4; 
  d._dd = 5; 
  cout << sizeof(d) << endl; 
  return 0; 
}

菱形虛擬繼承對象模型:

兩個空格處地址相差為8,第一個空格處存放空格處位置到AA的偏移量為20,第二個空格處存放空格處位置到AA的偏移量為12,浪費兩個空間存放偏移量,AA只需計算一次。

PS:

1.虛繼承解決了在菱形繼承體系里面子類對象包含多份父類對象的數(shù)據(jù)冗余&浪費空間的問題。

2.虛繼承體系看起來好復雜,在實際應用我們通常不會定義如此復雜的繼承體系。一般不到萬不得已都不要定義菱形結構的虛繼承體系結構,因為使用虛繼承解決數(shù)據(jù)冗余問題也帶來了性能上的損耗。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C++處理圖存儲的方式分享

    C++處理圖存儲的方式分享

    這篇文章主要介紹了C++處理圖存儲的方式分享,文章圍繞鄰接矩陣、鄰接表、鏈式前向的主題展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • C++20 格式化字符串的實現(xiàn)

    C++20 格式化字符串的實現(xiàn)

    本文主要講述了C++20中新引入的std::format功能,該功能用于格式化字符串,提供了一種簡潔、類型安全且靈活的方式來構建格式化字符串,文章從使用場景、格式化規(guī)則、自定義類型的格式化等方面進行了詳細的介紹,感興趣的可以了解一下
    2024-10-10
  • OpenCV實現(xiàn)圖像校正功能

    OpenCV實現(xiàn)圖像校正功能

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像校正功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Windows上使用vs編譯fdk-aac的教程詳解

    Windows上使用vs編譯fdk-aac的教程詳解

    有時需要在Windows上用到fdk-aac,fdk-aac是源碼是cmake的,可以直接轉成vs項目,下面就跟隨小編一起學習一下如何在Windows上使用vs編譯fdk-aac吧
    2023-11-11
  • Java?C++?算法題解leetcode669修剪二叉搜索樹示例

    Java?C++?算法題解leetcode669修剪二叉搜索樹示例

    這篇文章主要為大家介紹了Java?C++?算法題解leetcode669修剪二叉搜索樹示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 詳細解析C語言中的開方實現(xiàn)

    詳細解析C語言中的開方實現(xiàn)

    這篇文章主要介紹了詳細解析C語言中的開方實現(xiàn),包括一道要求精度的整數(shù)開方的題目,需要的朋友可以參考下
    2015-08-08
  • 深入理解char *a與char a[]的區(qū)別

    深入理解char *a與char a[]的區(qū)別

    很多人可能或多或少知道char *a與char a[]的一些區(qū)別,但如果詳細的說出來卻不知如何說去,下面這篇文章就給大家詳細介紹了關于C語言中char *a與char a[]的區(qū)別,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。
    2016-12-12
  • C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機制

    C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機制

    這篇文章主要介紹了C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機制的相關資料,需要的朋友可以參考下
    2017-01-01
  • VC++創(chuàng)建msi文件的方法

    VC++創(chuàng)建msi文件的方法

    這篇文章主要介紹了VC++創(chuàng)建msi文件的方法,對于應用程序的開發(fā)有一定的借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C++重載運算符你真的了解嗎

    C++重載運算符你真的了解嗎

    這篇文章主要為大家詳細介紹了C++重載運算符,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

阳高县| 商南县| 安阳县| 长沙市| 高雄市| 柘城县| 泸西县| 静海县| 兴国县| 开平市| 察隅县| 县级市| 利辛县| 弋阳县| 赤壁市| 长宁区| 托克托县| 共和县| 云龙县| 临泽县| 镇原县| 桃江县| 突泉县| 乐清市| 林口县| 增城市| 石河子市| 六安市| 乐平市| 内江市| 老河口市| 安福县| 鹤岗市| 凤山市| 合水县| 万宁市| 五大连池市| 承德县| 资兴市| 承德县| 金华市|