7.1 繼承和派生
考點(diǎn)1 繼承和派生的基本概念
繼承的實(shí)質(zhì)就是建造新的派生類。派生類從一個(gè)或多個(gè)以前定義的基類繼承數(shù)據(jù)和函數(shù),同時(shí)增加或重新定義數(shù)據(jù)和操作。這就產(chǎn)生了類的層次性。換句話說(shuō),繼承就是創(chuàng)建一個(gè)具有別的類屬性和行為的新類的能力。我們把這種通過(guò)特殊化已有的類來(lái)建立新類的過(guò)程,叫做“類的派生”,原有的類叫做“基類”,新建立的類叫做“派生類”從類的成員角度來(lái)看,派生類自動(dòng)地將基類的所有數(shù)據(jù)成員和除了構(gòu)造,析構(gòu)函數(shù)之外的全部成員函數(shù)作為自己的成員,這叫做“繼承”?;惡团缮愑挚梢苑謩e叫做“父類”和“子類”。在C++中有兩種繼承:?jiǎn)卫^承和多繼承。對(duì)于單繼承,派生類中只能有一個(gè)基類;對(duì)于多繼承,派生類可以有多個(gè)基類。單繼承和多繼承的基類和派生類的關(guān)
考點(diǎn)2 派生類的定義與構(gòu)成
在C++中,定義派生類的一般形式為:
單繼承的定義如下:
class<派生類名>:<繼承方式><基類名>
{
<派生類新定義的成員>
};
多繼承的定義如下:
class<派生類名>:<繼承方式1><基類名1>,
<繼承方式2><基類名2>,
…
<繼承方式n><基類名n>
{
<派生類新定義的成員>
};
其中,<繼承方式>即派生類的訪問(wèn)控制方式,用于規(guī)定基類成員在派生類中的訪問(wèn)權(quán)限,即基類成員在派生類中是公有的、私有的或保護(hù)的。常用的3種繼承方式是公有繼承(public),私有繼承(private)和保護(hù)繼承(protected)。缺省的類繼承方式是私有繼承private .
<派生類新定義的成員>是指定義的派生類自己的成員(除了從基類繼承來(lái)的所有成員之外,新增加的數(shù)據(jù)成員和函數(shù)成員)。
派生類的成員由兩部分構(gòu)成:一部分是從基類繼承得到的,一部分是自己定義的新成員,所有這些成員仍然分為公有(public),私有(private)和保護(hù)(protected)3種訪問(wèn)性質(zhì)。
7.2 派生類對(duì)基類成員的訪問(wèn)
考點(diǎn)3 派生類對(duì)基類成員的訪問(wèn)
派生類繼承了基類的全部數(shù)據(jù)成員和除了構(gòu)造、析構(gòu)函數(shù)之外的全部成員函數(shù),但這些成員在派生類中的訪問(wèn)屬性在派生過(guò)程中通過(guò)繼承方式是可以調(diào)整的。通過(guò)公有繼承(public),私有繼承(private)和保護(hù)繼承(protected)3種繼承方式將具有公有(public),私有(private)和保護(hù)(protected)3種訪問(wèn)屬性的基類成員在派生類中具有了新的訪問(wèn)屬性。表7-l描述了派生類的繼承訪問(wèn)屬性。
從上表可以看出:
(l)基類中的私有成員在派生類中是不可見(jiàn)的,只能在基類內(nèi)部訪問(wèn)。
(2)派生類中的成員不能訪問(wèn)基類中的私有成員,但可以訪問(wèn)基類中的公有成員和保護(hù)成員。
(3) 在公有繼承時(shí),派生類的對(duì)象可以訪問(wèn)基類中的公有成員;派生類的成員函數(shù)可以訪問(wèn)基類中的公有成員和保護(hù)成員。
(4)在私有繼承和保護(hù)繼承時(shí),基類的私有成員只能在基類內(nèi)部訪問(wèn),而無(wú)法再往下繼承。
小提示:
在派生關(guān)系中,構(gòu)造函數(shù)和析構(gòu)函數(shù)是不能被繼承的。
7.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
考點(diǎn)4 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
1.構(gòu)造函數(shù)
由于構(gòu)造函數(shù)不能被繼承,因此,派生類的構(gòu)造函數(shù)必須通過(guò)調(diào)用基類的構(gòu)造函數(shù)來(lái)初始化基類成員所以,在定義派生類的構(gòu)造函數(shù)時(shí)除了對(duì)自己的數(shù)據(jù)成員進(jìn)行初始化外,還必須負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)使基類的數(shù)據(jù)成員得以初始化。如果派生類中還有其他類的對(duì)象成員時(shí),還應(yīng)包含對(duì)對(duì)象成員初始化的構(gòu)造函數(shù)。派生類的構(gòu)造函數(shù)的一般定義形式為:
<派生類名>::<派生類名>(<總參數(shù)表>):<基類名1>(<參數(shù)表1>),
…
<基類名n>(<參數(shù)表n>),
<成員對(duì)象名1><參數(shù)表n+1>,
考點(diǎn)1 繼承和派生的基本概念
繼承的實(shí)質(zhì)就是建造新的派生類。派生類從一個(gè)或多個(gè)以前定義的基類繼承數(shù)據(jù)和函數(shù),同時(shí)增加或重新定義數(shù)據(jù)和操作。這就產(chǎn)生了類的層次性。換句話說(shuō),繼承就是創(chuàng)建一個(gè)具有別的類屬性和行為的新類的能力。我們把這種通過(guò)特殊化已有的類來(lái)建立新類的過(guò)程,叫做“類的派生”,原有的類叫做“基類”,新建立的類叫做“派生類”從類的成員角度來(lái)看,派生類自動(dòng)地將基類的所有數(shù)據(jù)成員和除了構(gòu)造,析構(gòu)函數(shù)之外的全部成員函數(shù)作為自己的成員,這叫做“繼承”?;惡团缮愑挚梢苑謩e叫做“父類”和“子類”。在C++中有兩種繼承:?jiǎn)卫^承和多繼承。對(duì)于單繼承,派生類中只能有一個(gè)基類;對(duì)于多繼承,派生類可以有多個(gè)基類。單繼承和多繼承的基類和派生類的關(guān)
考點(diǎn)2 派生類的定義與構(gòu)成
在C++中,定義派生類的一般形式為:
單繼承的定義如下:
class<派生類名>:<繼承方式><基類名>
{
<派生類新定義的成員>
};
多繼承的定義如下:
class<派生類名>:<繼承方式1><基類名1>,
<繼承方式2><基類名2>,
…
<繼承方式n><基類名n>
{
<派生類新定義的成員>
};
其中,<繼承方式>即派生類的訪問(wèn)控制方式,用于規(guī)定基類成員在派生類中的訪問(wèn)權(quán)限,即基類成員在派生類中是公有的、私有的或保護(hù)的。常用的3種繼承方式是公有繼承(public),私有繼承(private)和保護(hù)繼承(protected)。缺省的類繼承方式是私有繼承private .
<派生類新定義的成員>是指定義的派生類自己的成員(除了從基類繼承來(lái)的所有成員之外,新增加的數(shù)據(jù)成員和函數(shù)成員)。
派生類的成員由兩部分構(gòu)成:一部分是從基類繼承得到的,一部分是自己定義的新成員,所有這些成員仍然分為公有(public),私有(private)和保護(hù)(protected)3種訪問(wèn)性質(zhì)。
7.2 派生類對(duì)基類成員的訪問(wèn)
考點(diǎn)3 派生類對(duì)基類成員的訪問(wèn)
派生類繼承了基類的全部數(shù)據(jù)成員和除了構(gòu)造、析構(gòu)函數(shù)之外的全部成員函數(shù),但這些成員在派生類中的訪問(wèn)屬性在派生過(guò)程中通過(guò)繼承方式是可以調(diào)整的。通過(guò)公有繼承(public),私有繼承(private)和保護(hù)繼承(protected)3種繼承方式將具有公有(public),私有(private)和保護(hù)(protected)3種訪問(wèn)屬性的基類成員在派生類中具有了新的訪問(wèn)屬性。表7-l描述了派生類的繼承訪問(wèn)屬性。
從上表可以看出:
(l)基類中的私有成員在派生類中是不可見(jiàn)的,只能在基類內(nèi)部訪問(wèn)。
(2)派生類中的成員不能訪問(wèn)基類中的私有成員,但可以訪問(wèn)基類中的公有成員和保護(hù)成員。
(3) 在公有繼承時(shí),派生類的對(duì)象可以訪問(wèn)基類中的公有成員;派生類的成員函數(shù)可以訪問(wèn)基類中的公有成員和保護(hù)成員。
(4)在私有繼承和保護(hù)繼承時(shí),基類的私有成員只能在基類內(nèi)部訪問(wèn),而無(wú)法再往下繼承。
小提示:
在派生關(guān)系中,構(gòu)造函數(shù)和析構(gòu)函數(shù)是不能被繼承的。
7.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
考點(diǎn)4 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
1.構(gòu)造函數(shù)
由于構(gòu)造函數(shù)不能被繼承,因此,派生類的構(gòu)造函數(shù)必須通過(guò)調(diào)用基類的構(gòu)造函數(shù)來(lái)初始化基類成員所以,在定義派生類的構(gòu)造函數(shù)時(shí)除了對(duì)自己的數(shù)據(jù)成員進(jìn)行初始化外,還必須負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)使基類的數(shù)據(jù)成員得以初始化。如果派生類中還有其他類的對(duì)象成員時(shí),還應(yīng)包含對(duì)對(duì)象成員初始化的構(gòu)造函數(shù)。派生類的構(gòu)造函數(shù)的一般定義形式為:
<派生類名>::<派生類名>(<總參數(shù)表>):<基類名1>(<參數(shù)表1>),
…
<基類名n>(<參數(shù)表n>),
<成員對(duì)象名1><參數(shù)表n+1>,