基本概念
①.基類:可供其他類繼承的類,基類的成員也將成為派生類的成員。
②.派生類:從基類繼承而來的類,稱為派生類。
③.虛函式:基類中希望其派生類可以定義自己版本的函式宣告為虛函式,使用關鍵字 virtual 。
④.純虛函式:在類內部宣告虛函式時,在分號之前使用 =0,虛函式可用沒有定義。
⑤.抽象基類:含有乙個或者多個純虛函式的類,無法建立抽象基類的物件。若派生類沒有對繼承的純虛函式定義自己的版本,則派生類也是抽象的。
⑥.動態繫結:當使用基類的引用或者指標呼叫乙個虛函式時,只有在執行時才能根據所繫結物件的實際型別來選擇函式版本。
訪問控制與繼承
private 成員永遠只能被本類成員函式或者本類友元訪問;protected 成員只能被派生類訪問。
①.public 繼承:基類的非私有成員訪問屬性不變;基類的 public 成員還是 public ,基類的 protected 成員還是 protected ,基類的 private 成員不可訪問。
class d 以 public 形式繼承 class b,意味著 d 的物件同時也是乙個 b 的物件,即 d 是 b 的一種,所有對 b 的操作都可以作用於 d,d 繼承了 b 的介面和實現。
class b
;//建構函式
};class d:public b
;//建構函式
void f()
private:
int d;
};d d(1);
cout << d.a << endl;//可以訪問
cout << d.b << endl;//錯誤,基類受保護成員類外不可訪問
cout << d.c << endl;//錯誤,基類的私有成員類外不可訪問
②.protected 繼承:基類的非私有成員在派生類都是受包含成員;基類的 public 成員變為 protected ,基類的 protected 成員還是 protected ,基類的 private 成員不可訪問。
③.private 繼承:基類的非私有成員在派生類都是私有成員;基類的 public 成員變為 private ,基類的 protected 成員變成 private ,基類的 private 成員不可訪問。
class d 以 private 形式繼承 class b,意味著只有實現部分被繼承而介面被隱去,即 d 的物件根據 b 的物件的實現得到,即 d 和 b 沒有任何概念上的關聯關係。
class b
;//建構函式
};class d:private b
;//建構函式
void f()
private:
int d;
};d d(1);
cout << d.a << endl;//錯誤,基礎的成員變成私有成員,禁止類外訪問
cout << d.b << endl;//錯誤,基類受保護成員類外不可訪問
cout << d.c << endl;//錯誤,基類的私有成員類外不可訪問
介面繼承和實現繼承
①.public 繼承下,派生類總是會繼承基類的所有介面;private 繼承下,派生類僅繼承實現,隱藏基類的介面
②.虛函式可以讓派生類繼承指定的介面和乙份預設的實現
③.虛函式可以讓派生類繼承指定的介面然後覆蓋自己的實現
④.純虛函式可以讓派生類只繼承指定的介面
⑤.純虛函式可以讓派生類只繼承指定的介面,派生類可以主動繼承基類實現
⑥.非虛函式可以讓派生類繼承指定的介面以及強制性的實現
類作用域
①.派生類的作用域位於基類作用域之內
因為派生類的作用域位於基類作用域之內,所以可以通過派生類可以像使用自己成員一樣使用基類的成員。
②.派生類會隱藏掉基類中同名的成員
宣告在內層作用域的函式不會過載宣告在外層作用域的函式,因此派生類會因此作用域內同名的基類成員;隱藏規則僅和名稱有關,和函式型別以及引數列表無關。
class b
;class d:public b
;d d;
d.f1();//正確
d.f1(0);//錯誤,派生類中 f1 隱藏了基類中的過載版本
d.f2();錯誤,派生類中 f2 隱藏了基類中 f2
d.f2(0);//正確
構造與析構過程
①.構造過程
分配記憶體、依次呼叫父類的建構函式、根據成員變數的順序依次呼叫成員的建構函式、執行建構函式體。
②.析構過程
執行析構函式、根據成員變數的順序依次呼叫成員的析構函式、依次呼叫父類的析構函式、釋放記憶體
C 類學習總結 六 繼承與多型 續
定義基類 成員函式 用作基類的類通常會包含兩種成員函式 一是希望派生類進行覆蓋自己實現的函式,定義為虛函式 二是希望派生類直接繼而不改變實現的函式。虛析構函式 基類的析構函式必須是虛函式,為了多型時能執行動態繫結從而正確的釋放記憶體。受保護成員 使用關鍵字 protected 來宣告受保護的成員。類...
C 學習筆記 繼承與多型
1 關於繼承 inheritance 的概念 在c 中有 has a 和 is a 的 兩個概念。1.1 has a 即為在乙個類定義中包含另乙個類的物件 class a class b 1.2 is a 即我們說的繼承 如下,b繼承a,a為基類,b為a的派生類,b繼承了a的所有資料成員和成員函式。...
c 學習筆記( )繼承與多型
1.繼承的作用 復用 2.派生類繼承基類的什麼東西 除了基類的構造和析構函式以外的所有成員 3.public 任意位置都可以訪問 protected 本類類中,子類類中訪問 private 本類類中訪問 基類中不同的訪問限定符下的成員以不同的繼承方式在派生類中的訪問限定 public protect...