版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C/C+程序設(shè)計(jì)程序設(shè)計(jì)1C/C+程序設(shè)計(jì)程序設(shè)計(jì)2四、派生類(lèi)的三種繼承方式四、派生類(lèi)的三種繼承方式 關(guān)鍵字關(guān)鍵字 private, public, protected 具有雙重含義:具有雙重含義: 1. 明確界定同一類(lèi)層次中各成員的訪(fǎng)問(wèn)控制屬性明確界定同一類(lèi)層次中各成員的訪(fǎng)問(wèn)控制屬性; 2.是指類(lèi)上下關(guān)系中派生類(lèi)對(duì)于基類(lèi)成員的訪(fǎng)問(wèn)控制屬是指類(lèi)上下關(guān)系中派生類(lèi)對(duì)于基類(lèi)成員的訪(fǎng)問(wèn)控制屬性的隱含演化規(guī)則。派生類(lèi)的繼承方式就是指第二個(gè)含義性的隱含演化規(guī)則。派生類(lèi)的繼承方式就是指第二個(gè)含義而言。首先抓住下面幾個(gè)主要的概念:而言。首先抓住下面幾個(gè)主要的概念: a. 繼承不影響基類(lèi)的數(shù)據(jù)成員分配繼承不影響
2、基類(lèi)的數(shù)據(jù)成員分配,不破壞基類(lèi)的獨(dú)立性不破壞基類(lèi)的獨(dú)立性; b. 所有的數(shù)據(jù)成員都占有內(nèi)存,靜態(tài)數(shù)據(jù)成員被唯一地所有的數(shù)據(jù)成員都占有內(nèi)存,靜態(tài)數(shù)據(jù)成員被唯一地放置在全局?jǐn)?shù)據(jù)區(qū)。放置在全局?jǐn)?shù)據(jù)區(qū)。C/C+程序設(shè)計(jì)程序設(shè)計(jì)3 c. 派生類(lèi)對(duì)象占有的內(nèi)存是基類(lèi)對(duì)象占有的內(nèi)存和派生派生類(lèi)對(duì)象占有的內(nèi)存是基類(lèi)對(duì)象占有的內(nèi)存和派生類(lèi)新增數(shù)據(jù)成員的內(nèi)存之和。類(lèi)新增數(shù)據(jù)成員的內(nèi)存之和。 d. 類(lèi)層次本身的訪(fǎng)問(wèn)控制屬性和繼承方式對(duì)于對(duì)象的內(nèi)類(lèi)層次本身的訪(fǎng)問(wèn)控制屬性和繼承方式對(duì)于對(duì)象的內(nèi)存分配無(wú)影響。存分配無(wú)影響。 通過(guò)繼承無(wú)論是私有繼承還是公共繼承,派生類(lèi)的對(duì)象通過(guò)繼承無(wú)論是私有繼承還是公共繼承,派生類(lèi)的對(duì)象既
3、潛在地繼承上層基類(lèi)的所有數(shù)據(jù)狀態(tài)也潛在地?fù)碛谢?lèi)所既潛在地繼承上層基類(lèi)的所有數(shù)據(jù)狀態(tài)也潛在地?fù)碛谢?lèi)所有的成員函數(shù)。有的成員函數(shù)。 派生類(lèi)對(duì)于基類(lèi)的成員訪(fǎng)問(wèn)控制屬性受制于兩個(gè)因素,派生類(lèi)對(duì)于基類(lèi)的成員訪(fǎng)問(wèn)控制屬性受制于兩個(gè)因素,基類(lèi)本身成員的訪(fǎng)問(wèn)控制屬性,派生類(lèi)相對(duì)于基類(lèi)的繼承方基類(lèi)本身成員的訪(fǎng)問(wèn)控制屬性,派生類(lèi)相對(duì)于基類(lèi)的繼承方式控制。式控制。C/C+程序設(shè)計(jì)程序設(shè)計(jì)4下面是關(guān)于編譯器繼承方式的描述下面是關(guān)于編譯器繼承方式的描述: 1). 對(duì)于任意繼承方式,基類(lèi)的私有成員對(duì)于派生類(lèi)是對(duì)于任意繼承方式,基類(lèi)的私有成員對(duì)于派生類(lèi)是“不可訪(fǎng)問(wèn)的不可訪(fǎng)問(wèn)的”。 2). 對(duì)于公共繼承方式,基類(lèi)的公共成
4、員為派生類(lèi)的公對(duì)于公共繼承方式,基類(lèi)的公共成員為派生類(lèi)的公共成員,基類(lèi)的保護(hù)成員為派生類(lèi)的保護(hù)成員。共成員,基類(lèi)的保護(hù)成員為派生類(lèi)的保護(hù)成員。 3). 對(duì)于保護(hù)繼承方式,基類(lèi)的公共的和保護(hù)的成員變對(duì)于保護(hù)繼承方式,基類(lèi)的公共的和保護(hù)的成員變?yōu)榕缮?lèi)的保護(hù)成員。為派生類(lèi)的保護(hù)成員。 4). 對(duì)于私有繼承方式,基類(lèi)的公共的和保護(hù)的成員變對(duì)于私有繼承方式,基類(lèi)的公共的和保護(hù)的成員變?yōu)榕缮?lèi)的私有成員。為派生類(lèi)的私有成員。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)5 除開(kāi)禁止派生類(lèi)訪(fǎng)問(wèn)的基類(lèi)的私有成員以外,無(wú)論是繼除開(kāi)禁止派生類(lèi)訪(fǎng)問(wèn)的基類(lèi)的私有成員以外,無(wú)論是繼承的成員還是新增的成員,派生類(lèi)的成員訪(fǎng)問(wèn)控制屬性只有承的
5、成員還是新增的成員,派生類(lèi)的成員訪(fǎng)問(wèn)控制屬性只有三種:三種: 1). 可以在任何位置訪(fǎng)問(wèn)的公共成員??梢栽谌魏挝恢迷L(fǎng)問(wèn)的公共成員。 2). 可以出現(xiàn)在派生類(lèi)中的保護(hù)成員??梢猿霈F(xiàn)在派生類(lèi)中的保護(hù)成員。 3). 不出現(xiàn)在派生類(lèi)的私有成員。不出現(xiàn)在派生類(lèi)的私有成員。 保護(hù)成員和私有成員僅由類(lèi)的成員函數(shù)或者友元函數(shù)訪(fǎng)保護(hù)成員和私有成員僅由類(lèi)的成員函數(shù)或者友元函數(shù)訪(fǎng)問(wèn),禁止派生類(lèi)對(duì)象外部訪(fǎng)問(wèn)。問(wèn),禁止派生類(lèi)對(duì)象外部訪(fǎng)問(wèn)。 公共成員允許對(duì)象外部訪(fǎng)問(wèn)。訪(fǎng)問(wèn)控制對(duì)于類(lèi)作用域所公共成員允許對(duì)象外部訪(fǎng)問(wèn)。訪(fǎng)問(wèn)控制對(duì)于類(lèi)作用域所 有的名稱(chēng)是同等適用的。這些名稱(chēng)包括成員名、類(lèi)中的枚舉有的名稱(chēng)是同等適用的。這些名稱(chēng)包
6、括成員名、類(lèi)中的枚舉常數(shù)名稱(chēng)和嵌套類(lèi)。常數(shù)名稱(chēng)和嵌套類(lèi)。C/C+程序設(shè)計(jì)程序設(shè)計(jì)6五、繼承和不繼承的語(yǔ)義五、繼承和不繼承的語(yǔ)義 C+語(yǔ)言在關(guān)于繼承的特殊函數(shù)時(shí)指出:不參與繼承的語(yǔ)言在關(guān)于繼承的特殊函數(shù)時(shí)指出:不參與繼承的特殊函數(shù)是構(gòu)造函數(shù)、析構(gòu)函數(shù)、賦值運(yùn)算符函數(shù)和作為特特殊函數(shù)是構(gòu)造函數(shù)、析構(gòu)函數(shù)、賦值運(yùn)算符函數(shù)和作為特權(quán)地位的友元函數(shù)。前已指出派生類(lèi)繼承了基類(lèi)的數(shù)據(jù)狀權(quán)地位的友元函數(shù)。前已指出派生類(lèi)繼承了基類(lèi)的數(shù)據(jù)狀態(tài)。態(tài)。 即便是私有繼承,基類(lèi)的私有成員依然成為派生類(lèi)對(duì)象即便是私有繼承,基類(lèi)的私有成員依然成為派生類(lèi)對(duì)象內(nèi)存的一部分。內(nèi)存的一部分。 友元函數(shù)不繼承的含義是指:友元函數(shù)形參列
7、表的基類(lèi)友元函數(shù)不繼承的含義是指:友元函數(shù)形參列表的基類(lèi)的對(duì)象指針只能夠無(wú)禁錮的訪(fǎng)問(wèn)基類(lèi)的所有成員,這種特權(quán)的對(duì)象指針只能夠無(wú)禁錮的訪(fǎng)問(wèn)基類(lèi)的所有成員,這種特權(quán)地位不因派生類(lèi)的繼承關(guān)系而使得基類(lèi)的特權(quán)函數(shù)也獲得對(duì)地位不因派生類(lèi)的繼承關(guān)系而使得基類(lèi)的特權(quán)函數(shù)也獲得對(duì)派生類(lèi)成員的無(wú)條件訪(fǎng)問(wèn)。派生類(lèi)成員的無(wú)條件訪(fǎng)問(wèn)。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)7 繼承的含義:基類(lèi)的數(shù)據(jù)成員和函數(shù)成員在派生類(lèi)可繼承的含義:基類(lèi)的數(shù)據(jù)成員和函數(shù)成員在派生類(lèi)可訪(fǎng)問(wèn)的環(huán)境下可當(dāng)作派生類(lèi)的一個(gè)有機(jī)組成部分,就好像上訪(fǎng)問(wèn)的環(huán)境下可當(dāng)作派生類(lèi)的一個(gè)有機(jī)組成部分,就好像上下層次的區(qū)分并不存在一樣。下層次的區(qū)分并不存在一樣。 繼承的含
8、義指形如繼承的含義指形如obj.m_n 或或pobj-f()訪(fǎng)問(wèn)格式,如訪(fǎng)問(wèn)格式,如果派生類(lèi)中存在相應(yīng)的成員直接采用派生類(lèi)的成員。果派生類(lèi)中存在相應(yīng)的成員直接采用派生類(lèi)的成員。 如果派生類(lèi)沒(méi)有提供相關(guān)的成員,則使用從基類(lèi)繼承的如果派生類(lèi)沒(méi)有提供相關(guān)的成員,則使用從基類(lèi)繼承的可訪(fǎng)問(wèn)成員??稍L(fǎng)問(wèn)成員。 派生類(lèi)成員函數(shù)的定義遵循基類(lèi)的一般規(guī)則,但派生類(lèi)派生類(lèi)成員函數(shù)的定義遵循基類(lèi)的一般規(guī)則,但派生類(lèi)繼承了基類(lèi)的數(shù)據(jù)成員和成員函數(shù)。根據(jù)繼承的方式和繼承繼承了基類(lèi)的數(shù)據(jù)成員和成員函數(shù)。根據(jù)繼承的方式和繼承的語(yǔ)義操作相應(yīng)的信息。的語(yǔ)義操作相應(yīng)的信息。C/C+程序設(shè)計(jì)程序設(shè)計(jì)8 構(gòu)造函數(shù)和析構(gòu)函數(shù)不能繼承表
9、現(xiàn)一種對(duì)象分而制之的構(gòu)造函數(shù)和析構(gòu)函數(shù)不能繼承表現(xiàn)一種對(duì)象分而制之的思想,基類(lèi)負(fù)責(zé)構(gòu)造自身的數(shù)據(jù)成員,派生類(lèi)負(fù)責(zé)構(gòu)造繼承思想,基類(lèi)負(fù)責(zé)構(gòu)造自身的數(shù)據(jù)成員,派生類(lèi)負(fù)責(zé)構(gòu)造繼承的和新添補(bǔ)的數(shù)據(jù)成員,這樣有利于派生類(lèi)缺省構(gòu)造函數(shù)自的和新添補(bǔ)的數(shù)據(jù)成員,這樣有利于派生類(lèi)缺省構(gòu)造函數(shù)自動(dòng)調(diào)用基類(lèi)的缺省構(gòu)造函數(shù)。相應(yīng)的析構(gòu)函數(shù)執(zhí)行各自的清動(dòng)調(diào)用基類(lèi)的缺省構(gòu)造函數(shù)。相應(yīng)的析構(gòu)函數(shù)執(zhí)行各自的清理工作。理工作。 這種對(duì)象處理當(dāng)前類(lèi)數(shù)據(jù)的思想并非不適應(yīng)于其它可以這種對(duì)象處理當(dāng)前類(lèi)數(shù)據(jù)的思想并非不適應(yīng)于其它可以繼承的成員函數(shù),但由于構(gòu)造和析構(gòu)函數(shù)被系統(tǒng)自動(dòng)調(diào)用的繼承的成員函數(shù),但由于構(gòu)造和析構(gòu)函數(shù)被系統(tǒng)自動(dòng)調(diào)用的特
10、殊性,上下類(lèi)層次之間的操作有必要加以嚴(yán)格的界定。特殊性,上下類(lèi)層次之間的操作有必要加以嚴(yán)格的界定。C/C+程序設(shè)計(jì)程序設(shè)計(jì)9 基類(lèi)的構(gòu)造函數(shù)恰恰是可以被派生類(lèi)構(gòu)造函數(shù)以基類(lèi)名基類(lèi)的構(gòu)造函數(shù)恰恰是可以被派生類(lèi)構(gòu)造函數(shù)以基類(lèi)名顯式調(diào)用的函數(shù),不能繼承的特殊函數(shù)實(shí)際上是要求重點(diǎn)處顯式調(diào)用的函數(shù),不能繼承的特殊函數(shù)實(shí)際上是要求重點(diǎn)處理的函數(shù),對(duì)于不繼承的函數(shù)應(yīng)該精心提交派生類(lèi)的相應(yīng)版理的函數(shù),對(duì)于不繼承的函數(shù)應(yīng)該精心提交派生類(lèi)的相應(yīng)版本,以分別處理數(shù)據(jù)的變動(dòng)情況。在這里不繼承的含意是指本,以分別處理數(shù)據(jù)的變動(dòng)情況。在這里不繼承的含意是指派生類(lèi)的對(duì)象自動(dòng)調(diào)用的是自身類(lèi)的構(gòu)造函數(shù),而不隱含地派生類(lèi)的對(duì)象自
11、動(dòng)調(diào)用的是自身類(lèi)的構(gòu)造函數(shù),而不隱含地向上借用。向上借用。 賦值運(yùn)算符函數(shù)的作用類(lèi)似拷貝構(gòu)造函數(shù),不參入繼承賦值運(yùn)算符函數(shù)的作用類(lèi)似拷貝構(gòu)造函數(shù),不參入繼承機(jī)制。特別地如果類(lèi)中存在指針成員,程序員應(yīng)仔細(xì)處理指機(jī)制。特別地如果類(lèi)中存在指針成員,程序員應(yīng)仔細(xì)處理指針的動(dòng)態(tài)內(nèi)存資源。針的動(dòng)態(tài)內(nèi)存資源。 如果用戶(hù)未提交構(gòu)造函數(shù)和析構(gòu)函數(shù)或賦值運(yùn)算符函如果用戶(hù)未提交構(gòu)造函數(shù)和析構(gòu)函數(shù)或賦值運(yùn)算符函數(shù),編譯器生成相應(yīng)的簡(jiǎn)單版本滿(mǎn)足最低化的要求。數(shù),編譯器生成相應(yīng)的簡(jiǎn)單版本滿(mǎn)足最低化的要求。C/C+程序設(shè)計(jì)程序設(shè)計(jì)10 繼承的含義是指基類(lèi)的數(shù)據(jù)成員和函數(shù)成員在派生類(lèi)可繼承的含義是指基類(lèi)的數(shù)據(jù)成員和函數(shù)成員在
12、派生類(lèi)可訪(fǎng)問(wèn)的環(huán)境下可當(dāng)作派生類(lèi)的一個(gè)有機(jī)組成部分,就好像上訪(fǎng)問(wèn)的環(huán)境下可當(dāng)作派生類(lèi)的一個(gè)有機(jī)組成部分,就好像上下層次的區(qū)分并不存在一樣。下層次的區(qū)分并不存在一樣。 繼承的含義指形如繼承的含義指形如obj.m_n 或或pobj-f()訪(fǎng)問(wèn)格式,如訪(fǎng)問(wèn)格式,如果派生類(lèi)中存在相應(yīng)的成員直接采用派生類(lèi)的成員。果派生類(lèi)中存在相應(yīng)的成員直接采用派生類(lèi)的成員。 如果派生類(lèi)沒(méi)有提供相關(guān)的成員,則使用從基類(lèi)繼承的如果派生類(lèi)沒(méi)有提供相關(guān)的成員,則使用從基類(lèi)繼承的可訪(fǎng)問(wèn)成員??稍L(fǎng)問(wèn)成員。 派生類(lèi)成員函數(shù)的定義遵循基類(lèi)的一般規(guī)則,但派生類(lèi)派生類(lèi)成員函數(shù)的定義遵循基類(lèi)的一般規(guī)則,但派生類(lèi)繼承了基類(lèi)的數(shù)據(jù)成員和成員函數(shù)
13、。根據(jù)繼承的方式和繼承繼承了基類(lèi)的數(shù)據(jù)成員和成員函數(shù)。根據(jù)繼承的方式和繼承的語(yǔ)義操作相應(yīng)的信息。的語(yǔ)義操作相應(yīng)的信息。C/C+程序設(shè)計(jì)程序設(shè)計(jì)11六、派生與繼承的算例六、派生與繼承的算例例例 B類(lèi)公共地繼承類(lèi)公共地繼承A類(lèi)類(lèi),A類(lèi)的公共成員是類(lèi)的公共成員是B類(lèi)的公共成員類(lèi)的公共成員#include class A public: long& X() return x; protected: long x; ; class B:public A public: B() x=1; ; class C:public B /* public:B:x;*/ ;void main() C b; long*
14、 p=& (b.X() +=1); printf (%dn,*p); /輸出輸出: 2C/C+程序設(shè)計(jì)程序設(shè)計(jì)12例例 B類(lèi)保護(hù)地繼承類(lèi)保護(hù)地繼承A類(lèi),類(lèi),A類(lèi)保護(hù)的或公共的成員是類(lèi)保護(hù)的或公共的成員是B類(lèi)類(lèi)的保護(hù)成員的保護(hù)成員#include class A protected: long x; ; class B: protected A public: long& X() return x; ;class C: protected B public: B:X; ; /C類(lèi)保護(hù)地繼承類(lèi)保護(hù)地繼承B類(lèi)類(lèi)void main() /public: B:X;界定成員的控制屬性?xún)?yōu)于界定成員的控制屬性
15、優(yōu)于 /繼承方式繼承方式 protected 的控制屬性的控制屬性 C b; /public: B:X; 表示將基類(lèi)中保護(hù)的成員在表示將基類(lèi)中保護(hù)的成員在 /派生類(lèi)中界定為派生類(lèi)中界定為public屬性屬性 long* p=& (b.X()=1); printf (%dn,*p); /輸出輸出: 1C/C+程序設(shè)計(jì)程序設(shè)計(jì)13例例 B類(lèi)私有地繼承類(lèi)私有地繼承A類(lèi),類(lèi),A類(lèi)的公共的或保護(hù)的成員是類(lèi)的公共的或保護(hù)的成員是B類(lèi)的私有成員類(lèi)的私有成員#include class A private: long x; public: long& X() return x; ; class B: A pu
16、blic: long y; long& Y() return X(); ;class C: private B public: B:Y; ;void main() /public: B:Y;將基類(lèi)中公將基類(lèi)中公 /共的成員在派生類(lèi)中界定為共的成員在派生類(lèi)中界定為public屬性屬性 C c; long* p=& (c.Y ()=1); printf (%dn,*p); /輸出輸出: 1C/C+程序設(shè)計(jì)程序設(shè)計(jì)14例例 B類(lèi)保護(hù)地繼承類(lèi)保護(hù)地繼承A類(lèi),類(lèi), C類(lèi)私有地繼承類(lèi)私有地繼承B類(lèi)。類(lèi)。#include class A protected: long x; ; class B: prote
17、cted A public: long& operator+=(int n) return x+=n; ;class C: private B public: B:operator+=; public:B:x; ;void main() C b; b.x=1; long* p=&(b+=2); printf (%d, %dn,*p, b.x); /輸出輸出: 3,3C/C+程序設(shè)計(jì)程序設(shè)計(jì)15七、構(gòu)造和析構(gòu)的次序七、構(gòu)造和析構(gòu)的次序 生成派生類(lèi)的對(duì)象時(shí)編譯器按照如下的次序調(diào)用構(gòu)造函生成派生類(lèi)的對(duì)象時(shí)編譯器按照如下的次序調(diào)用構(gòu)造函數(shù):數(shù): 1. 基類(lèi)構(gòu)造函數(shù)。多繼承情形先聲明的先調(diào)用即從左到基類(lèi)
18、構(gòu)造函數(shù)。多繼承情形先聲明的先調(diào)用即從左到右的次序調(diào)用基類(lèi)構(gòu)造函數(shù)。右的次序調(diào)用基類(lèi)構(gòu)造函數(shù)。 2. 同一類(lèi)層次中嵌入對(duì)象的構(gòu)造函數(shù),嵌入對(duì)象構(gòu)造函同一類(lèi)層次中嵌入對(duì)象的構(gòu)造函數(shù),嵌入對(duì)象構(gòu)造函數(shù)按照在類(lèi)中的聲明次序依次調(diào)用,與成員初始化語(yǔ)法的排數(shù)按照在類(lèi)中的聲明次序依次調(diào)用,與成員初始化語(yǔ)法的排放次序無(wú)關(guān)。嵌入對(duì)象如果存在才調(diào)用。放次序無(wú)關(guān)。嵌入對(duì)象如果存在才調(diào)用。 3. 派生類(lèi)的構(gòu)造函數(shù)。確保繼承樹(shù)層次的構(gòu)造函數(shù)全被派生類(lèi)的構(gòu)造函數(shù)。確保繼承樹(shù)層次的構(gòu)造函數(shù)全被調(diào)用一次。調(diào)用一次。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)16 4. 總的原則是從左到右從上到下由內(nèi)向外調(diào)用構(gòu)造函總的原則是從左到右從上到下由
19、內(nèi)向外調(diào)用構(gòu)造函數(shù)。數(shù)。 下面是構(gòu)造函數(shù)成員初始化在單繼承含一個(gè)嵌入對(duì)象時(shí)下面是構(gòu)造函數(shù)成員初始化在單繼承含一個(gè)嵌入對(duì)象時(shí)的語(yǔ)法格式的語(yǔ)法格式: CDerived:CDerived (t1 v1,t2 v2, ., tn vn ): CBase (v1,v2,v3), objEmbed (v2,v3,vn) 派生類(lèi)部分子集合成員初始化;派生類(lèi)部分子集合成員初始化; 冒號(hào)后的成員初始化列表中冒號(hào)后的成員初始化列表中CBase (v1,v2,v3)是對(duì)于基是對(duì)于基類(lèi)構(gòu)造函數(shù)的顯式調(diào)用而類(lèi)構(gòu)造函數(shù)的顯式調(diào)用而objEmbed (v2,v3,vn) 是嵌入對(duì)象是嵌入對(duì)象調(diào)用自身所隸屬的構(gòu)造函數(shù)。調(diào)用自
20、身所隸屬的構(gòu)造函數(shù)。 語(yǔ)法上基類(lèi)名、嵌入對(duì)象名兩者之間的次序可以互換。語(yǔ)法上基類(lèi)名、嵌入對(duì)象名兩者之間的次序可以互換。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)17 派生類(lèi)構(gòu)造函數(shù)的形參作用域開(kāi)始于冒號(hào)處結(jié)束于構(gòu)造派生類(lèi)構(gòu)造函數(shù)的形參作用域開(kāi)始于冒號(hào)處結(jié)束于構(gòu)造函數(shù)的外層右花括號(hào)。因此冒號(hào)后構(gòu)造函數(shù)中的實(shí)參可以直函數(shù)的外層右花括號(hào)。因此冒號(hào)后構(gòu)造函數(shù)中的實(shí)參可以直接采用派生類(lèi)的形參和其它全局變量名。接采用派生類(lèi)的形參和其它全局變量名。 如下的對(duì)象定義語(yǔ)句:如下的對(duì)象定義語(yǔ)句: CDerived objd(v1, v2,.,vn ); CDerived* pObjd=new CDerived(v1,v2,.,v
21、n); 導(dǎo)致派生類(lèi)含導(dǎo)致派生類(lèi)含 n個(gè)形參的構(gòu)造函數(shù)的調(diào)用,由此誘發(fā)一個(gè)形參的構(gòu)造函數(shù)的調(diào)用,由此誘發(fā)一系列基類(lèi)構(gòu)造函數(shù)的啟動(dòng)。實(shí)參從最晚派生類(lèi)層層向上傳系列基類(lèi)構(gòu)造函數(shù)的啟動(dòng)。實(shí)參從最晚派生類(lèi)層層向上傳遞,直到頂層基類(lèi)構(gòu)造函數(shù)中的代碼首先得到執(zhí)行。遞,直到頂層基類(lèi)構(gòu)造函數(shù)中的代碼首先得到執(zhí)行。 為確保此種傳遞機(jī)制的環(huán)環(huán)相扣,派生類(lèi)負(fù)責(zé)直接基類(lèi)為確保此種傳遞機(jī)制的環(huán)環(huán)相扣,派生類(lèi)負(fù)責(zé)直接基類(lèi)的初始化。的初始化。C/C+程序設(shè)計(jì)程序設(shè)計(jì)18 派生類(lèi)缺省的構(gòu)造函數(shù)激發(fā)基類(lèi)相應(yīng)缺省構(gòu)造函數(shù)的調(diào)派生類(lèi)缺省的構(gòu)造函數(shù)激發(fā)基類(lèi)相應(yīng)缺省構(gòu)造函數(shù)的調(diào)用。成員函數(shù)可以作遞歸調(diào)用。用。成員函數(shù)可以作遞歸調(diào)用。例如
22、例如: void CDerived: Line ()Line();是遞歸調(diào)用,遞歸函數(shù)的形參是反復(fù)入棧的,隱含的是遞歸調(diào)用,遞歸函數(shù)的形參是反復(fù)入棧的,隱含的this指指針形參出現(xiàn)于遞歸函數(shù)時(shí)需要精心設(shè)計(jì)算法。針形參出現(xiàn)于遞歸函數(shù)時(shí)需要精心設(shè)計(jì)算法。 為避免遞歸調(diào)用發(fā)散,派生類(lèi)為避免遞歸調(diào)用發(fā)散,派生類(lèi)CDerived成員函數(shù)中顯成員函數(shù)中顯式地調(diào)用基類(lèi)的成員函數(shù)。式地調(diào)用基類(lèi)的成員函數(shù)。形式為形式為: void CDerived: Line() CBase: Line(); ;.; 對(duì)于虛掉類(lèi)域分辨符的索引方式對(duì)于虛掉類(lèi)域分辨符的索引方式m_n,派生類(lèi)優(yōu)先使用,派生類(lèi)優(yōu)先使用自身類(lèi)新增的名稱(chēng)
23、。如果派生類(lèi)本身未交付這個(gè)名稱(chēng),則上自身類(lèi)新增的名稱(chēng)。如果派生類(lèi)本身未交付這個(gè)名稱(chēng),則上溯索引可訪(fǎng)問(wèn)的基類(lèi)中的名稱(chēng)。溯索引可訪(fǎng)問(wèn)的基類(lèi)中的名稱(chēng)。 這是優(yōu)先采用派生類(lèi)成員名稱(chēng)的支配原則。這是優(yōu)先采用派生類(lèi)成員名稱(chēng)的支配原則。C/C+程序設(shè)計(jì)程序設(shè)計(jì)19例例 基類(lèi)和嵌入對(duì)象的初始化基類(lèi)和嵌入對(duì)象的初始化#include struct SData long nx; long ny; ; typedef struct tagPOINT long x; long y; POINT;class CPoint : public tagPOINT public:CPoint () CPoint (POINT initPt) x=initPt.x; y=initPt.y; ;class CBase public: CBase() CBase() delete m_p; protected: CBase (SData* pData) m_n=pDat
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)業(yè)可持續(xù)發(fā)展項(xiàng)目合作合同范本
- 2025年度純凈水生產(chǎn)線(xiàn)自動(dòng)化升級(jí)改造合同4篇
- 二零二四業(yè)績(jī)達(dá)成與員工崗位聘約合同6篇
- 2025年度個(gè)人房屋交易房地產(chǎn)抵押合同范本
- 二零二五版木屑生物質(zhì)炭生產(chǎn)與市場(chǎng)推廣合同4篇
- 公共事業(yè)合同管理與信息公開(kāi)措施
- 2025年新型環(huán)保材料采礦權(quán)轉(zhuǎn)讓與市場(chǎng)推廣合同范本3篇
- 2025年度鋼材市場(chǎng)調(diào)研與分析服務(wù)合同范本
- 2025年度文化演出經(jīng)紀(jì)合同范本4篇
- 2025年度門(mén)窗行業(yè)環(huán)保材料采購(gòu)合同范例4篇
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級(jí)國(guó)土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測(cè)對(duì)環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競(jìng)賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫(kù)及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動(dòng)物城》中英文對(duì)照(全本臺(tái)詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級(jí)語(yǔ)文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
評(píng)論
0/150
提交評(píng)論