in c 讀後感 理解繼承和組合

2022-03-15 21:58:24 字數 1242 閱讀 4187

1、繼承類預設繼承了基類的成員函式,即,在不重定義的前提下,y.f( )和y.x::f( )呼叫的同乙個函式

而組合類則必須通過成員類物件進行函式呼叫,乙個類的構造函式呼叫順序是先基類,再組合類,最後會進行本類的建構函式。

2 如果重定義了基類的函式,則基類的同名函式全部自動隱藏。所謂「全部」是因為,可能在基類中有多個同名的過載函式,它們全部隱藏

覆蓋是指派生類函式覆蓋基類函式

函式名相同;

引數相同;

基類函式必須有virtual關鍵字;

不同的範圍(派生類和基類)。

隱藏是指派生類遮蔽了基類的同名函式相同

1、 函式名相同,但引數不同,此時不論基類有無virtual關鍵字,基類函式將被隱藏。

2、 函式名相同,引數也相同,但基類無virtual關鍵字(有就是覆蓋),基類函式將被隱藏

所謂「隱藏」不是說不能呼叫,而是說,當呼叫y.f( )時呼叫的是y中定義的新f( ),想呼叫基類的f則要顯式說明y.x::f( ),顯式說明而已。

3 所有建構函式、析構函式、operator=都不能自動繼承 ,但編譯器會自動生成預設建構函式、拷貝建構函式、operator=,並正確地呼叫基類的相應函式,它們工作的很好

如果要為子類定義帶引數的建構函式,則必須同時也定義子類的預設建構函式。如果自定義了拷貝建構函式,則也必須同時自定義預設建構函式

在子類的拷貝建構函式中,如果想呼叫基類的拷貝建構函式,必須顯式在初始化列表呼叫,否則編譯器自動呼叫預設建構函式

在子類的operator=中,如果想呼叫基類的operator=,必須顯式在函式體中呼叫,否則編譯器什麼都不做。

#include

using namespace std;

//繼承問題!

class a

這個程式有幾個點:

1 首先,不管c類的建構函式怎麼寫,初始化列表或者怎麼呼叫,怎麼個順序,各個類的構造順序均不變,為a b c (基類, 組合類, 子類)

c(int i = 0):b(i), a(i) ;

2,如果不顯式的呼叫b的拷貝建構函式,編譯器便會呼叫b的預設建構函式這很好理解,如果不顯式呼叫a的拷貝建構函式,編譯器將會呼叫a的預設建構函式!

3,如果a或者b沒有自己定義的拷貝建構函式,c如果顯式呼叫他們的拷貝構造呼叫的是編譯器合成的拷貝建構函式。如果c沒有定義拷貝建構函式,,編譯器的合成拷貝建構函式會呼叫b的拷貝構造,因為編譯器合成的拷貝構造是將內部成員依次拷貝。所以此時也會先呼叫a的拷貝構造,因為這個合成的拷貝建構函式會顯式的呼叫它。

in c 讀後感 理解繼承和組合

1 繼承類預設繼承了基類的成員函式,即,在不重定義的前提下,y.f 和y.x f 呼叫的同乙個函式 而組合類則必須通過成員類物件進行函式呼叫,乙個類的構造函式呼叫順序是先基類,再組合類,最後會進行本類的建構函式。2 如果重定義了基類的函式,則基類的同名函式全部自動隱藏。所謂 全部 是因為,可能在基類...

理想和現實 讀後感

幾天前看在google reader上看完yangfan分享一篇帖子 z80年代 兩個青年群體的悲劇性衝撞z 若有感觸 或許年輕人看完這篇帖子以後,不知道會有什麼樣的感概,或許這個只是離我們很遠,確實那麼的近。理想和現實常常都會不期而遇,人一生是碌碌無為還是想做點事情?生活在社會上,就應該為社會做點...

《我所理解的生活》 讀後感

1.我失落在當他人以善意對我的時候,我的第一反應居然是會不會有什麼陰謀。2.不是每件事都能給人生帶來什麼,人生的時光,總需要去度過。而我選擇這樣度過。3.如果有年輕人問我,如何可以做到跟我一樣自由地追逐夢想?我的回答是 能這麼問的人都沒有決心去自由追逐夢想,有決心的人基本上都不問別人。4.只是現在不...