如何進(jìn)行C++類(lèi)的繼承
在C++語(yǔ)言中,C++類(lèi)是提供封裝的邏輯單位,類(lèi)的每一個(gè)對(duì)象都包含有描述其自身狀態(tài)的數(shù)據(jù)集合,并且通過(guò)接收特定的消息來(lái)處理這個(gè)數(shù)據(jù)集合。如果程序設(shè)計(jì)人員能夠通過(guò)增加、修改或替換指定類(lèi)的部分內(nèi)容的方法對(duì)該類(lèi)進(jìn)行剪裁,就可以適應(yīng)不同的應(yīng)用,從而在很大程度上增強(qiáng)了數(shù)據(jù)封裝的價(jià)值,而接下來(lái)要討論的繼承就完全可以實(shí)現(xiàn)這種操作。
繼承是一個(gè)進(jìn)程,通過(guò)繼承,一個(gè)對(duì)象可以獲得另一個(gè)對(duì)象的屬性(包括函數(shù)),并可向其中加入屬于自己的一些特征。作為C++語(yǔ)言的一種重要機(jī)制,用繼承的方法可以自動(dòng)為一個(gè)類(lèi)提供來(lái)自另一個(gè)類(lèi)的操作和數(shù)據(jù)結(jié)構(gòu),進(jìn)而使程序設(shè)計(jì)人員在一個(gè)一般的類(lèi)的基礎(chǔ)上很快建立一個(gè)新的類(lèi),而不必從零開(kāi)始設(shè)計(jì)每個(gè)類(lèi)。
當(dāng)一個(gè)類(lèi)被其他的類(lèi)繼承時(shí),被繼承的類(lèi)稱(chēng)為基類(lèi)(可不是雞肋^(guò)_^),又稱(chēng)為父類(lèi)。繼承其他類(lèi)屬性的C++類(lèi)稱(chēng)為派生類(lèi),又稱(chēng)為子類(lèi)。
一般情況下,繼承的進(jìn)程起源于一個(gè)基類(lèi)的定義,基類(lèi)定義了其所有派生類(lèi)的公有屬性。從本質(zhì)上講,基類(lèi)具有同一類(lèi)集合中的公共屬性,派生類(lèi)繼承了這些屬性,并且增加了自己特有的屬性。從任何已存在的類(lèi)繼承的實(shí)質(zhì)就是建造新的派生類(lèi)。
從一個(gè)基類(lèi)派生的繼承稱(chēng)為單繼承,換句話(huà)說(shuō),派生類(lèi)只有一個(gè)直接基類(lèi)。單繼承聲明語(yǔ)句的常用格式為:
- class 派生類(lèi)名: 訪(fǎng)問(wèn)控制關(guān)鍵字 基類(lèi)名
- {
- 數(shù)據(jù)成員和成員函數(shù)聲明
- };
與此相對(duì)地,從多個(gè)基類(lèi)派生的繼承稱(chēng)為多繼承或多重繼承,也就是說(shuō),一個(gè)派生類(lèi)有多個(gè)直接基類(lèi)。在某些面向?qū)ο蟮恼Z(yǔ)言(如Java)中不支持類(lèi)間的多重繼承而只支持單重繼承,即一個(gè)類(lèi)至多只能有一個(gè)直接父類(lèi),因此實(shí)現(xiàn)類(lèi)似的功能需要借助接口等其他機(jī)制。而在C++中提供了多重繼承的語(yǔ)法支持,使得問(wèn)題變得簡(jiǎn)單了許多。多重繼承聲明語(yǔ)句的常用格式為:
- class 派生類(lèi)名: 訪(fǎng)問(wèn)控制關(guān)鍵字 基類(lèi)名1, 訪(fǎng)問(wèn)控制關(guān)鍵字 基類(lèi)名2,...
- {
- 數(shù)據(jù)成員和成員函數(shù)聲明
- };
除了多重繼承之外,一個(gè)派生類(lèi)繼承多個(gè)基類(lèi)還有一種方法,就是把派生類(lèi)作為基類(lèi)再次供別的類(lèi)繼承,產(chǎn)生多層次的繼承關(guān)系。例如類(lèi)A派生類(lèi)B,類(lèi)B派生類(lèi)C,則稱(chēng)類(lèi)A是類(lèi)B的直接基類(lèi),類(lèi)B是類(lèi)C的直接基類(lèi),類(lèi)A是類(lèi)C的間接基類(lèi)。
類(lèi)的層次結(jié)構(gòu)也叫做繼承鏈。還是上面的例子,當(dāng)建立C++類(lèi)的對(duì)象時(shí),類(lèi)A的構(gòu)造函數(shù)最先被調(diào)用,接下來(lái)被調(diào)用的是類(lèi)B的構(gòu)造函數(shù),最后是類(lèi)C的構(gòu)造函數(shù)。析構(gòu)函數(shù)的調(diào)用順序正好相反。當(dāng)一個(gè)派生類(lèi)繼承有層次的類(lèi)時(shí),繼承鏈上的每個(gè)派生類(lèi)必須將它需要的變量傳遞給它的基類(lèi)。
【編輯推薦】