C 中的菱形繼承深入分析

2022-10-04 00:51:12 字數 1029 閱讀 2187

菱形繼承

class person

; class student:public person

; class teacher :public person

; class assistant :public student, public teacher

;ps:

assistant的物件中存在兩份person成員

菱形繼承存在二義性和資料冗餘

解決:使用虛繼承

首先不使用虛繼承時:

#include

using namespace std;

class aa

; class bb :public aa

; cwww.cppcns.comlass cc :public aa

; class dd :public bb, public cc ;

int main()

菱形繼程式設計客棧承物件模型:

使用虛繼承時:

#include

using namespace std;

class aa

; class bb :virtual public aa

; class cc :virtual public aa

; class dd :public bb, public cc ;

int main()

菱形虛擬繼承物件模型:

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

ps:1.虛繼承解決了在菱形繼承體系裡面子類物件包含多份父類物件的資料冗餘&浪費空間的問題。

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

本文標題: c++中的菱形繼承深入分析

本文位址: /ruanjian/c/195217.html

深入分析C 引用

關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言 我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關於 ...

深入分析C 引用

摘自 關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關...

深入分析C 引用

關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關於 c...