第13章-類和數據抽象
1.C++並不自動初始化變量,要保證類中的數據成員被初始化,必須使用構造函數。
2.構造函數與類的名稱相同,並且沒有任何類型,當然也就沒有返回值。
3.一個類有多個構造函數,並且構造函數可能有相同的名稱,但是參數一定不同。
4.構造函數分爲:帶參數的構造函數+不帶參數的構造函數(默認構造函數)。
5.析構函數:沒有任何類型、一個類只有一個、不能夠帶參數、名稱相對固定:“~”加上類名。
6.類函數:成員函數+構造函數+析構函數。
7.*.cpp只包含函數的定義,不包含類的定義。
第14章 集成和組合
1.兩個類聯繫起來的方法:繼承(“ is-a kind of ”關係:是一種。。。)和組合(“ has-a kind of ”關係:有一種。。。關係);
2.繼承:在已有類的基礎上創建新的類,其中在已有類的基礎上創建的類稱之爲,派生類;已有類稱之爲:基類。
3.繼承:單重繼承(一個基類)、多重繼承(多個基類)。
4.繼承:
class circle: publicshape
{
..........
}
class circle: private shape
{
...........
}
其中,派生類circle繼承了基類shape,public表示shape的所有公有成員及成爲circle的公有成員,private表示shape的所有公有成員成爲circle的私有成員。
5.派生新類經歷的三個步驟:
- 吸收基類成員
- 改造基類成員
- 添加新的成員
6.三種繼承方式:
- 公有繼承
- 私有繼承
- 保護繼承
8.私有派生:繼承的基類成員全部變成私有成員,也就是基類成員的終結。
9.保護繼承:派生類的家族可訪問,類繼承家族之外不可訪問;
10.絕對不要重新定義繼承而來的非虛函數。
11.基類與派生類的對應關係:
- 單繼承:派生類由一個基類派生而來
- 多繼承:派生類由多個基類派生而來
- 多重派生:一個基類派生出多個不同的派生類
- 多層派生:派生類又作爲基類,繼續派生派生類。
12.基類與派生類的構造函數均自己負責。
13.派生類的構造函數任務之一:給基類的構造函數傳遞參數。
14.同名隱藏原則:派生類中的同名成員會使得基類中同名成員隱藏。
15.虛基類:虛繼承
16.組合:一輛汽車有一個發動機和四個輪子;接口:作爲整體的汽車不在具備發動機的運轉功能和輪子的轉動功能,但通過這些功能的組合,具有了自己的功能:移動.
17.公有繼承:A類是B類的公有基類,則B類型對象包括了A類型的全部接口。如:卡車是汽車,消防車也是汽車;接口:卡車和消防車具有汽車的通用功能(移動),它們還各自具有自己的功能。
18.派生類對象:總含有一個基類的子對象。
19.不同情況下的內存佈局:
- 單繼承:基類數據在前,派生類新增數據在後;
- 多繼承:各基類數據按順序在前,派生類新增數據在後;
- 虛繼承:需要增加指針,間接訪虛基類數據;
20.運算符重載:
除了以下運算符,其餘運算符均可重載:"." ".*" "::" "?:"
重載後運算符的優先級和結合性都不會改變
21.聲明形式
函數類型 operator 運算符 (形參)
{
.... ....
}
其中,operator 運算符爲函數名
22.虛函數:
virtual 函數類型 函數名 (形參表)
{
函數體
}
23.虛函數不能進行早綁定,只能進行晚綁定。編譯器爲每一個具有虛函數的類準備了一個虛函數表。
24.純虛函數是一個在基類中聲明的虛函數,它在該基類中沒有辦法具體定義此函數的內容,要求各個派生類根據實際需要定義自己的版本。
- 純虛函數的聲明格式:
virtual 函數類型 函數名 (參數表) = 0;
- 帶有純虛函數的類稱爲抽象類:
class 類名
{
virtual 類型 函數名 (參數表) = 0;
... ...
}
25.