C及C++程序設(shè)計(jì) 第十七章 類的繼承_第1頁
C及C++程序設(shè)計(jì) 第十七章 類的繼承_第2頁
C及C++程序設(shè)計(jì) 第十七章 類的繼承_第3頁
C及C++程序設(shè)計(jì) 第十七章 類的繼承_第4頁
C及C++程序設(shè)計(jì) 第十七章 類的繼承_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第十七章類的繼承17.1繼承17.2繼承機(jī)制中的初始化17.3多重繼承17.4虛基類17.1繼承17.1.1繼承與派生類如果要為每一種數(shù)據(jù)結(jié)構(gòu)都從頭定義,無疑會(huì)浪費(fèi)時(shí)間。面向?qū)ο蠹夹g(shù)提供了一種機(jī)制,使程序設(shè)計(jì)者能夠重用其它類的定義,構(gòu)成自己的特有的類。在這個(gè)新的類中繼承了被重用類的特性,又含有自己的特性。這種機(jī)制稱為繼承。從已有的類(基類)派生出一個(gè)新類(派生類)的格式是:

class類名1,訪問控制類名2

{

privare:

成員說明列表

protected:

成員說明列表

public:

成員列表說明

);其中類名1是派生類名,類名2是基類名?!霸L問控制”用于規(guī)定基類成員在派生類中的訪問權(quán)限,即基類成員在派生類中是公有的還是私有的。

訪問控制使用public時(shí),說明基類是派生類的公有成員,稱類名1從類名2公有派生,類名2是類名1的公有基類。訪問控制使用private時(shí),說明基類是派生類私有成員,稱類名1從類名2私有派生,類名2是類名1的私有基類。如果訪問控制說明被省略,則隱含為private。

無論是公有派生還是私有派生,基類的私有成員在派生類中仍是私有。訪問控制只是影響基類的公有成員和保護(hù)成員。17.1.2公有派生在公有派生的情況下,基類的所有public成員被繼承為派生類的public成員,在派生類之外可以訪問它們?;愔斜徽f明為private的成員,派生類的成員函數(shù)不能訪問它們。基類中的protected成員,在派生類中也是protected成員。這些成員可以供派生類的成員訪問,但對其它類和函數(shù)則是私有的。例17.1.1從類point(點(diǎn))公有派生類cercle(圓)首先,定義一個(gè)類point,它有兩個(gè)私有數(shù)據(jù)成員:點(diǎn)的橫坐標(biāo)x和縱坐標(biāo)y。四個(gè)公有的成員函數(shù),用于操作數(shù)據(jù)成員x和y。類point的定義如下:

classpoint

{private:

intx;

inty;

public:

voidset_x(intnum);

intget_x(void);

voidset_y(intnum);

intget_y(void);

};我們用這個(gè)類派生出一個(gè)類cercle。其數(shù)據(jù)成員為圓的半徑。因?yàn)?,圓除了半徑還需要一個(gè)點(diǎn)作為自己的圓心,而類“point”中已經(jīng)有了這方面內(nèi)容,所以,可以把類“point”作為基類,加以繼承。于是定義類cercle(圓)如下:

classcircle:publicpoint{private:

intradius;

public:

intget_radius(void);

voidset_radius(intnum);

voidshow(void);

};這個(gè)例子選用public派生,所以,基類的所有public元素,就好象在point類中說明過一樣。然而,派生類中的成員函數(shù)不能訪問基類的私有部分。如果把類point中的private改為protected,則派生類就能訪問它們了。這就是說,protected成員可以被繼承。17.1.3私有派生當(dāng)訪問控制選用private時(shí),即私有派生時(shí),基類的所有public成員和protected成員被繼承為派生類的private成員。即派生類的成員可以把它們作為自己私有成員來訪問。派生類之外不能訪問它們。在基類被說明為private的成員,派生類的成員也不能訪問它們。即派生類不能繼承基類的private成員?;愒L問控制派生類對基類的可訪問性publicpublicpublicprivatepublic不可訪問protectedpublicprotectedpublicprivateprivatedprivateprivate不可訪問protextedprivateprivate現(xiàn)將訪問控制的作用歸納如表17.1.1。表17.1.117.2繼承機(jī)制中的初始化由于派生類繼承了基類中的數(shù)據(jù),這就產(chǎn)生一個(gè)問題,如何和何時(shí)對基類的數(shù)據(jù)初始化,派生類如何初始化。上述問題可以通過基類和派生類的構(gòu)造函數(shù)來解決。17.2.1不帶參數(shù)的基類構(gòu)造函數(shù)17.2.2帶參數(shù)的基類構(gòu)造函數(shù)當(dāng)基類的構(gòu)造函數(shù)含有參數(shù)時(shí),任何派生類就必須包括構(gòu)造函數(shù)。其原因是,這樣就提供了一種把派生類構(gòu)造函數(shù)的參數(shù)傳遞給基類構(gòu)造函數(shù)的途徑。為把參數(shù)傳遞給基類,就要在派生類構(gòu)造函數(shù)后面,對這些參數(shù)加以說明。其一般形式為:

派生類名::派生類構(gòu)造函數(shù)名(參數(shù)表):基類構(gòu)造函數(shù)名(參數(shù)表)

{

//......

//......

}這里要注意用冒號(hào)“:”把派生類構(gòu)造函數(shù)同基類的參數(shù)表分隔開。其作用是將派生類構(gòu)造函數(shù)的參數(shù),傳遞給基類相應(yīng)的參數(shù)。這里兩個(gè)構(gòu)造函數(shù)的參數(shù)存在著對應(yīng)關(guān)系。

17.3多重繼承17.3.1多重繼承的繼承機(jī)制所謂多重繼承就是一個(gè)類繼承多個(gè)基類的屬性。這時(shí),一個(gè)派生類將有兩個(gè)或兩個(gè)以上的基類。例如,類C以private方式繼承類A,同時(shí)又以public方式繼承類B,如圖17.1所示。

圖17.1簡單多重繼承示意圖

相應(yīng)的定義語句可以這樣寫:

classC:privateA,publicB

{

//......

........

};

定義多重繼承的派生類的一般形式為:

class派生類名:基類名列表

{

//......

........

}17.3.2指向派生類的指針指向基類的指針和指向派生類的指針之間有一定的關(guān)系。例如,有一基類名為B_class和它的派生類D_class,則C++定義,定義為B_class的指針,也能作為指向D_class的指針使用,并可以用這個(gè)指向派生類對象的指針訪問繼承來的基類成員;但不能用它訪問派生類成員。定義為派生類的指針則既可以訪問派生類中定義的成員,也可以訪問從基類繼承來的成員。17.4虛基類17.4.1多重繼承中的二義性在C++中,如果在多條繼承路徑上有一個(gè)公共的基類,那么在這些路徑中的某幾條路徑的匯合處,這個(gè)公共的基類會(huì)產(chǎn)生多個(gè)拷貝(實(shí)例)。

17.4.2虛基類為了使上例中的公共的基類只產(chǎn)生一個(gè)數(shù)據(jù)成員b的拷貝,可以將這個(gè)基類說明為虛基類。這樣就不會(huì)產(chǎn)生二義性的問題。虛基類是在從基類派生出新類時(shí),用關(guān)鍵字virtual將基類說明為虛基類的。例如:

classbase_der1:virtualpublicbase{public:

intbd1;

};classbase_der2:virtualpublicbase{public:

intbd2;

};這樣說明以后,base類就只有一個(gè)數(shù)據(jù)成員b的拷貝。當(dāng)der12類的對象或成員函數(shù)在使用base類中的成員時(shí),就不會(huì)產(chǎn)生二義性的問題。一個(gè)派生類的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論