多重繼承課件_第1頁(yè)
多重繼承課件_第2頁(yè)
多重繼承課件_第3頁(yè)
多重繼承課件_第4頁(yè)
多重繼承課件_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、多重繼承多重繼承一個(gè)派生類可以有多個(gè)基類派生類同時(shí)繼承多個(gè)基類的成員,更好的軟件重用多重繼承時(shí)派生類構(gòu)造時(shí), 基類構(gòu)造函數(shù)的調(diào)用順序與派生類聲明的繼承順序相同, 而與成員初始化序列的順序無(wú)關(guān). 而析構(gòu)函數(shù)的調(diào)用順序和構(gòu)造函數(shù)的調(diào)用順序相反. 例、class C:public A,public B ;多重繼承可能會(huì)有大量的二義性,多個(gè)基類中可能包含同名變量或函數(shù),而且出現(xiàn)基類中的一個(gè)數(shù)據(jù)被拷貝多份現(xiàn)象,既占用內(nèi)存單元,在訪問(wèn)這些成員時(shí)也容易出錯(cuò)。多重繼承B(int data)A(int data)C(int data)Dvoid show()coutdata;多重繼承多重繼承中解決訪問(wèn)歧義的方法

2、(1)明確指明要訪問(wèn)定義于哪個(gè)基類中的成員基類名 : 數(shù)據(jù)成員名(或成員函數(shù)(參數(shù)表)) (2)采用虛擬繼承的方法-即虛基類虛擬繼承-虛基類的初始化 類成員的初始化可以通過(guò)創(chuàng)建類對(duì)象時(shí)調(diào)用它的構(gòu)造函數(shù)來(lái)完成,還可以由它的派生類調(diào)用它的構(gòu)造函數(shù)來(lái)完成。 思考:一個(gè)虛基類可能有多個(gè)的直接派生類和間接派生類,那么在這些派生類中是否有必要對(duì)此虛基類進(jìn)行多次初始化呢? 多重繼承B(int data)A(int data)C(int data)D(int B:data, int C:data)虛擬繼承虛基類的簡(jiǎn)單實(shí)例PeopleName,sex,ageTeacherTitle /職稱Studentscor

3、eGraduateWage /工資Show()/顯示各成員信息虛擬繼承class people public:people(char *pname,char s, int a)strcpy(name, pname);sex=s; age=a;protected:char name20,sex; int age;虛擬繼承class teacher : virtual public people public:teacher(char *str, char s, int a, char *ptitle):people(str,s,a) strcpy(title,ptitle);protected:

4、char title20;虛擬繼承class student : virtual public people public:student(char *str, char s, int a, float sco):people(str,s,a),score(sco) protected:float score;虛擬繼承class graduate : public teacher,public student public: graduate (char *str, char s, int a, float sco,char *ptitle,float w):people(str,s,a),t

5、eacher(str,s,a,ptitle), student(str,s,a,sco),wage(w)虛擬繼承 void show() cout“name:”nameendl;cout“age:”ageendl;cout“sex:”sexendl;cout“title:”titleendl;cout“score:”nameendl;cout“wages:”wageshow(); /調(diào)用基類對(duì)象的show函數(shù) 基類對(duì)象派生類對(duì)象指向基類對(duì)象的指針變量也可以指向派生類對(duì)象 例如:定義一個(gè)基類student(學(xué)生),再定義student的公有派生類graduate(研究生),用指向基類對(duì)象的指針輸

6、出數(shù)據(jù)?;悓?duì)象派生類對(duì)象 class student public: student(int n,char *str, float sco) num=n; strcpy(name,str); score=sco; void display() cout“num:”numendl; cout“name:”nameendl; cout“score:”scoreendl; protected: float score; int num; char name20; ; 基類對(duì)象派生類對(duì)象class graduate : public student public:graduate(int n, ch

7、ar *str, float sco,float p):student(n,str,sco),pay(p) void display() student:display(); cout“pay:”payendl;private: float pay;/工資 ;is_a和has_a類之間的關(guān)系是(is_a)類的繼承中學(xué)和學(xué)校,中學(xué)是學(xué)校,學(xué)校不能擁有中學(xué),中學(xué)是學(xué)校的一個(gè)特例,是某一種學(xué)校有(has_a)類的復(fù)合班級(jí)和學(xué)校,班級(jí)不是學(xué)校,學(xué)校擁有班級(jí),班級(jí)是學(xué)校的一部分,再如Pc機(jī)類,Cpu類,Storage類,I/O類is_a和has_ahas_a的例子:#include class stud

8、ent public: student() cout“student”endl; private: int semeshours; /總學(xué)時(shí) float gpa; /平均學(xué)分;is_a和has_aclass tutorpair() public: tutorpair( ) cout“tutorpair”endl; private: student stu; teacher chen;is_a和has_aint main() tutorpair tp; cout“back in main”endl; is_a和has_a練習(xí) 1、創(chuàng)建一個(gè)circuit類,該類使用三個(gè)數(shù)據(jù)成員存儲(chǔ)電路的電阻(R)

9、、輸入電壓(intv)和電流(A)。 Circuit類還有以下成員函數(shù): -一個(gè)帶有初始化數(shù)據(jù)成員參數(shù)的構(gòu)造函數(shù) -一個(gè)計(jì)算、返回電流的函數(shù)(即輸入電壓除以電阻) -一個(gè)顯示電阻、電流和輸入電壓的函數(shù)。 is_a和has_a創(chuàng)建一個(gè)繼承circuit的所有成員的amplifier類,除circuit類成員外,還有一些特定的成員: - 數(shù)據(jù)成員gain和輸出電壓outv - 一個(gè)帶有初始化數(shù)據(jù)成員參數(shù)的構(gòu)造函數(shù) -一個(gè)計(jì)算、返回輸出電壓的函數(shù)(輸入電壓乘以gain)設(shè)計(jì)函數(shù)實(shí)例化類的一個(gè)對(duì)象,然后使用對(duì)象來(lái)調(diào)用所有成員函數(shù)。is_a和has_a2、設(shè)計(jì)一個(gè)帶有下列成員的risistor類: - 一個(gè)用來(lái)保存電阻的數(shù)據(jù)成員 - 一個(gè)帶有用來(lái)初始化電阻的參數(shù)的構(gòu)造函數(shù) -一個(gè)返回電阻值的函數(shù) -一個(gè)顯示下列消息的析構(gòu)函數(shù) resistor is d

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論