繼承與多重繼承學習心得

1.子類別不能存取父類別的private成員資料及函數。所以一樣是透過public的成員函數來設定跟取得private的成員資料。

2.子類別能夠繼承父類別的所有成員函數及資料,但並不包括
(1)父類別的建構子和解構子
(2)父類別的朋友關係
(3)父類別的指定運算子

3.宣告子類別的繼承語法裡,存取控制的修飾子的意思是代表要將父類別的所有成員函數放在子類別的哪一區塊裡,如果(存取控制)修飾子是protected,那代表父類別的所有成員資料及函數都放在子類別的protected區塊;如果修飾子是private,所有的父類別成員資料及函數都在private區塊;而如果是public,父類別的public還是public,但protected則是protected。至於父類別原本的private區塊,無法使用何種繼承修飾子,子類別皆無法直接存取。

4.覆寫父類別的成員函數:就是改寫的意思,而且是在函數名稱相同、參數列的參數數目及型態相同及傳回型態相同的狀態下,在子類別重新定義一個成員函數。如果上述有一條件不相同就會變成新函數或者是函數過載。

5.隱藏父類別的成員資料:只要在子類別定義一個與父類別成員資料同名變數即可,變數型態可不同。然後在子類別裡將這個與父類別同名的變數放在private區塊,這樣一來,無論原本父類別的成員資料是否為public,透過這個繼承子類別建立的物件將無法再使用這個同名變數,所以稱之為隱藏。

6.類別的型態轉換與檢查
■物件型態轉換運算子
(1)static_cast<類別*>(運算式)
(2)const_cast<類別*>(運算式)
(3)dynamic_cast<類別*>(運算式)
(4)reinerpret_cast<類別*>(運算式)
static_case會直接轉換型態,如果型態不相關,編譯時會出現錯誤。通常只能從子類別物件轉換成父類別物件,而不能從父類別物件轉換成子類別物件,因為父類別不包括子類別。
const_case會取消常數物件的唯讀屬性。已宣告的常數指標物件不能再修改任何成員,只能在經過轉換後,指定給另一個非常數物件指標,透過這個指標來修改成員。因為兩個指標指向同一個記憶體位址,所以修改的物件也是同一個。
dynamic_cast會在執行階段檢查型態能不能轉換,不行的話會傳回NULL。和static_cast的差別就是可以型態不同可以通過編譯階段,但不能轉換仍然不能轉換。
reinerpret_cast轉換時會將物件內相同型態的成員資料依序放置到新指標物件內。兩者的成員資料數量不必相同。

7.類別的型態轉換必須以指標的方式來操作

8.子類別的物件可以使用父類別的指標來儲存。

9.typeid運算子可以用來判斷型態。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *