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) {cout<<"c is doing"/ c(int i = 0):a(i),b(i) {cout<<"c is doing"/ c(int i = 0):b(i) {cout<<"c is doing"/ c(int i = 0):a(i) {cout<<"c is doing"/ c(int i = 0) {cout<<"c is doing"<**於:
in c 讀後感 理解繼承和組合
1 繼承類預設繼承了基類的成員函式,即,在不重定義的前提下,y.f 和y.x f 呼叫的同乙個函式 而組合類則必須通過成員類物件進行函式呼叫,乙個類的構造函式呼叫順序是先基類,再組合類,最後會進行本類的建構函式。2 如果重定義了基類的函式,則基類的同名函式全部自動隱藏。所謂 全部 是因為,可能在基類...
理想和現實 讀後感
幾天前看在google reader上看完yangfan分享一篇帖子 z80年代 兩個青年群體的悲劇性衝撞z 若有感觸 或許年輕人看完這篇帖子以後,不知道會有什麼樣的感概,或許這個只是離我們很遠,確實那麼的近。理想和現實常常都會不期而遇,人一生是碌碌無為還是想做點事情?生活在社會上,就應該為社會做點...
《我所理解的生活》 讀後感
1.我失落在當他人以善意對我的時候,我的第一反應居然是會不會有什麼陰謀。2.不是每件事都能給人生帶來什麼,人生的時光,總需要去度過。而我選擇這樣度過。3.如果有年輕人問我,如何可以做到跟我一樣自由地追逐夢想?我的回答是 能這麼問的人都沒有決心去自由追逐夢想,有決心的人基本上都不問別人。4.只是現在不...