欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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成員

菱形繼承存在二義性和數據冗余

解決:

使用虛繼承

首先不使用虛繼承時:

#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.虛繼承解決了在菱形繼承體系里面子類對象包含多份父類對象的數據冗余&浪費空間的問題。

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

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

相關文章

  • 常用的C++標準庫頭文件小結

    常用的C++標準庫頭文件小結

    C++標準庫定義了一系列函數、宏和對象,以實現跨團隊、跨平臺的高效且具有卓越性能的標準化 C++ 代碼, 本文介紹常用的C++標準庫頭文件,需要的朋友可以參考下
    2023-11-11
  • C++ auto自動類型推導規(guī)則和使用詳解

    C++ auto自動類型推導規(guī)則和使用詳解

    C++11 賦予 auto 關鍵字新的含義,使用它來做自動類型推導。也就是說,使用了 auto 關鍵字以后,編譯器會在編譯期間自動推導出變量的類型,這樣我們就不用手動指明變量的數據類型了
    2022-08-08
  • 簡單的漢諾塔問題解法代碼

    簡單的漢諾塔問題解法代碼

    漢諾塔本是C語言開門就學的東西,簡單的漢諾塔問題解法代碼
    2013-03-03
  • MFC實現字幕滾動效果

    MFC實現字幕滾動效果

    這篇文章主要為大家詳細介紹了MFC實現滾動字幕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C語言for循環(huán)嵌套for循環(huán)在實踐題目中應用詳解

    C語言for循環(huán)嵌套for循環(huán)在實踐題目中應用詳解

    初學C語言,常常遇到for循環(huán)中嵌套個for循環(huán),初學者對于這種形式總是一知半解,這次我就整理了常見的for循環(huán)嵌套for循環(huán)的題目,我們一起爭取一舉拿下這類題。學廢他們,以后再見到就不怕啦!每天都要學一點呀。加油,奮斗的我們
    2022-05-05
  • C/C++?for?語句的要點與注意事項小結

    C/C++?for?語句的要點與注意事項小結

    C/C++ 中的?for?語句是一種常用的循環(huán)結構,用于重復執(zhí)行一段代碼,直到滿足某個條件為止,這篇文章主要介紹了C/C++?for?語句的要點與注意事項,需要的朋友可以參考下
    2024-06-06
  • C++中指針的引用*&的具體使用

    C++中指針的引用*&的具體使用

    本文主要介紹了C++中指針的引用*&的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實現投票系統(tǒng)

    C語言實現投票系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現投票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言實現將double/float 轉為字符串(帶自定義精度)

    C語言實現將double/float 轉為字符串(帶自定義精度)

    這篇文章主要介紹了C語言實現將double/float 轉為字符串(帶自定義精度),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • C++中的函數你真的理解了嗎

    C++中的函數你真的理解了嗎

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

最新評論