初學C 繼承與內嵌類

2021-06-07 01:14:34 字數 1205 閱讀 7293

對書本上繼承與派生部分的描述一直看得不是很明白,做個小實驗,增進理解:

#includeusing namespace std;

class a;

class test:public a;

test::test():a(4),b(5),a(3)

void test::print(){

cout<

類的繼承:

派生類可以繼承基類的所有成員。

在派生類中,成員可以按訪問屬性劃分為一下4中:

(1)不可訪問的成員。這是從基類私有成員繼承而來的,派生類或是建立派生類物件的模組都沒有辦法訪問到它們。如果從派生類繼續派生新類,也是無法訪問到的。

(2)私有成員。這裡可以包括從基類繼承過來的成員以及新增加的成員,在派生類內部可以訪問,但是從建立派生類物件的模組中無法訪問,繼續派生,就變成了新的派生類中不可訪問成員。

(3)保護成員。可能是新增加的也可能是從基類繼承過來的,派生類內部可以訪問,建立派生類物件的模組無法訪問,進一步派生,在新的派生類中可能成為私有成員或者保護成員。

(4)公有成員。派生類、建立派生類的模組都可以訪問,繼續派生,可能是新派生類中的私有、保護或者公有成員。

內嵌類及其初始化:

類的初始化函式定義中可以新增內嵌物件成員的初始化列表。也可以新增基類的建構函式。

當建立類的物件時,如果這個類具有內嵌物件成員,那麼各個內嵌物件將首先被自動建立。因此,在建立物件時既要對本類的基本型別資料成員進行初始化,又要對內嵌物件成員進行初始化。對基本型別的資料成員也可以這樣初始化。

在建立乙個組合類的物件時,不僅它自身的建構函式的函式體將被執行,而且還將呼叫其內嵌物件的建構函式。這時建構函式的呼叫順序如下:

(1)呼叫內嵌物件的建構函式,呼叫順序按照內嵌物件在組合類的定義中出現的次序。而內嵌物件在建構函式的初始化列表中出現的順序與內嵌物件建構函式的呼叫順序無關。

(2)執行本類建構函式的函式體。

如果有些內嵌物件沒有出現在建構函式的初始化列表中,那麼在第一步中,該內嵌物件的預設建構函式將被執行

有些資料成員的初始化必須在建構函式的初始化列表中進行,這些資料成員包括兩大類,一類是那些沒有預設建構函式的內嵌物件——因為這類物件初始化時必須提供引數,另一類是引用型別的資料成員——因為引用型變數必須在初始化時繫結引用的物件。如果乙個類包括這兩類成員,那麼編譯器不能夠為這個類提供隱含的預設建構函式,這時必須編寫顯式的建構函式,並且在每個建構函式的初始化列表中至少為這兩類資料成員初始化。

初學類的繼承

例項化子類的時候 對於繼承的開闢類存控制項是怎麼來的?1.對於構造方法的話,不管是子類還是父類都會開闢類存空間。2.對於成員變數,或成員方法的話,如果只有父類有的,只會開闢乙個。只有子類有的,也只會開闢乙個空間。對於覆蓋 父類的構造方法不能被覆蓋 總結如何正確書寫類,書寫類的步奏 最基本的步奏 1....

c 多重繼承與模板類繼承

在很多大型系統中,c 多重繼承很多 一般是純虛函式實現介面類,多重繼承的類,都是不能定義本身物件的虛函式類,大多是純虛函式類。純虛函式類沒有成員物件,所有的類函式都是純虛函式。例如 class ia public cobject virtual int send 0 class ib public ...

C 類模板與繼承

當類模板碰到繼承時,需要注意以下幾點 當子類繼承父類是乙個類模板時,子類在宣告的時候,要指定出父類中t的型別 如果不指定,編譯器無法給予子類分配記憶體 如果想靈活指定出父類中t的型別,子類也需變為類模板 include using namespace std 類模板與繼承 template clas...