![c計(jì)算機(jī)基礎(chǔ)教學(xué)研究室_第1頁](http://file4.renrendoc.com/view/84ecb82f3d83ab30c17f69b5190c0587/84ecb82f3d83ab30c17f69b5190c05871.gif)
![c計(jì)算機(jī)基礎(chǔ)教學(xué)研究室_第2頁](http://file4.renrendoc.com/view/84ecb82f3d83ab30c17f69b5190c0587/84ecb82f3d83ab30c17f69b5190c05872.gif)
![c計(jì)算機(jī)基礎(chǔ)教學(xué)研究室_第3頁](http://file4.renrendoc.com/view/84ecb82f3d83ab30c17f69b5190c0587/84ecb82f3d83ab30c17f69b5190c05873.gif)
![c計(jì)算機(jī)基礎(chǔ)教學(xué)研究室_第4頁](http://file4.renrendoc.com/view/84ecb82f3d83ab30c17f69b5190c0587/84ecb82f3d83ab30c17f69b5190c05874.gif)
![c計(jì)算機(jī)基礎(chǔ)教學(xué)研究室_第5頁](http://file4.renrendoc.com/view/84ecb82f3d83ab30c17f69b5190c0587/84ecb82f3d83ab30c17f69b5190c05875.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)基礎(chǔ)教學(xué)研究主要內(nèi)派生類成多重繼繼承與組繼面向?qū)ο蟪绦蛟O(shè)計(jì)有4個(gè)主要特點(diǎn)抽象、封裝、要較好地進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì),還必須了解面向?qū)ο蟪绦蛟O(shè)計(jì)另外兩個(gè)重要特征——繼承性和多態(tài)性。在本章中主要介紹有關(guān)繼承的知識,在第12章中將介紹多態(tài)性。面向?qū)ο蠹夹g(shù)強(qiáng)調(diào)軟件的可重用性(softwarereusability)。C++語言提供了類的繼承機(jī)制,解繼承與派生的概
基類(父類計(jì)算機(jī)系人教職教職學(xué)教行政管教行政管理人教本科研究系主系主(子類(子類基類與派生類的對應(yīng)關(guān)單繼多繼多重派多層派一個(gè)新類從已有的類那里獲得其已有特性,這種現(xiàn)象稱為類的繼承。通過繼承,一個(gè)新建子類從已有的父類那里獲得父類的特性。(遺傳)從另一角度說,從已有的類(父類)子類,稱為類的派生類的繼承是用已有的類來建立專用類的編程技術(shù)。派生類繼承了基類的所有數(shù)據(jù)成員和成員函數(shù),并可以對成員作必要的增加或調(diào)整。一個(gè)基類可以派生出多個(gè)派生類,每一個(gè)派生類又可以作為基類再派生出新的派生類,因此基類和派生類是相對而言的。(singleinheritance),這種繼承關(guān)系所形成的層次派生類的聲明方class派生類名:繼承方式基類{派生類新增加的}假設(shè)已經(jīng)聲明了一個(gè)基類Studnt,在此基礎(chǔ)上通過單繼承建立一個(gè)派生類Studnt1:classStudent1:publicStudent//聲明基類是voiddisplay_1 //新增加的成員函{cout<<″age:″<<age<<endl;cout<<″address:″<<addr<<endl;}int //新增加的數(shù)string //新增加的數(shù)據(jù)成繼承方三種繼承方不同繼承方式的影響主要體現(xiàn)在1、派生類成員對基類成員的訪問控制2、派生類對象對基類成員的訪問控制private(私有的)派生類的構(gòu)實(shí)際上,并不是把基類的成員和派生類自己增加的成員簡單地加在一起就成為派生類。構(gòu)造一個(gè)派生類包括以下3部分工作:(1)從基類接收成員。派生類把基類全部的成員(不包括構(gòu)造函數(shù)和析構(gòu)函數(shù))接收過來,也就是說是沒有選擇的,不能選擇接收其中一部分成員,而舍棄另一部分成員。要求我們根據(jù)派生類的需要慎重選擇基類,使冗余量最小*(2)調(diào)整從基類接收的成員。接收基類成員是程序人員不能*(3)在聲明派生類時(shí)增加的成員。這部分內(nèi)容是很重要的,它體現(xiàn)了派生類對基類功能的擴(kuò)展。要根據(jù)需要仔細(xì)考慮應(yīng)當(dāng)增加哪些成員,精心設(shè)計(jì)。此外,在聲明派生類時(shí),一般還應(yīng)當(dāng)自己定義派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù),因?yàn)闃?gòu)造函數(shù)和析構(gòu)函數(shù)是不能從基類繼承的。派生類成員的訪問屬公有繼承基類的pulic和protected成員的訪問屬性在派生類中保持不變,但基類的private成員不可訪問。派生類中的成員函數(shù)可以直接訪問基類中的public通過派生類的對象只能訪問基類的public派派生類對象(類外定義基基私有成}
派生私有成}有繼承舉class //基類Point類的聲 Point(floatxfloatvoidMove(floatxOff,floatfloatGetX(){returnX;}floatGetY(){returnprivate:私有數(shù)據(jù)成員floatX,Y;classRectanglepublicPoint//{ //新增公有函數(shù)成Rectangle(floatx,floaty,floatw,floatfloatGetH(){returnH;}floatGetW(){returnW;}private://新增私有數(shù)據(jù)成floatint Rectanglerect(2,3,20,10); return0;}運(yùn)行結(jié)果派生類成員的訪問屬私有繼承派生類中的成員函數(shù)可以直接訪問基類中的publicprotected成員,但不能訪問基類的private通過派生類的對象不能訪問基類中的任何成員,基類原有的外部接口被派生類封裝和隱蔽起來。派派生類對象(類外定義基基私有成}派生私有成}圖對于不需要再往下繼承的類的功能可以用私有繼承方式把它隱蔽起來,這樣,下一層的派生類無法訪問它的任何成員。例:私有繼承舉classRectangleprivate //派生類聲 //新增外部接Rectangle(floatx,floaty,floatw,float voidMove(floatxOff,floatyOff)floatGetX(){returnPoint::GetX();}floatGetY(){returnPoint::GetY();}floatGetH(){returnH;}floatGetW(){returnW;}private://新增私有數(shù)floatint Rectanglerect(2,3,20,10);return0;}派生類成員的訪問屬保護(hù)繼承*保護(hù)成員的意思是不能被外界引用,但可以被派生派生類中的成員函數(shù)可以直接訪問基類中的publicprotected成員,但不能訪問基類的private通過派生類基基}}派生類對象(類外定義類中引用保護(hù)成員class //基類Point類的聲 //公有函數(shù)成Point(floatx=0,floatvoidMove(floatxOff,floatfloatGetX(){returnX;}floatGetY(){return 保護(hù)數(shù)據(jù)floatclassRectangleprotected //派生類 //新增外部接Rectangle(floatx,floaty,floatw,float //訪問基類公有成voidMove(floatxOff,floatyOff){Point::Move(xOff,yOff);}floatGetX(){returnPoint::GetX();}floatGetY(){returnPoint::GetY();}floatGetH(){returnH;}floatGetW(){returnW;} float在派生類中引用保護(hù)成int Rectanglerect(2,3,20,10);return0;}訪問權(quán)限概public,private和protected是三種常用的繼承方式,繼承方式的同決定了派生類對基類成員的派生類的繼基
說如果需要在派生類中引用基類的某些成員,應(yīng)當(dāng)將基類的這些成員聲明為protetd,而不要聲明為private。如果善于利用保護(hù)成員,可以在類的層次結(jié)構(gòu)中找到數(shù)據(jù)共享與成員隱蔽之間的結(jié)合點(diǎn)。既可實(shí)現(xiàn)某些成員的隱蔽,又可方便地繼承,能實(shí)現(xiàn)代碼重用與擴(kuò)充。#include<iostream.h>classAvoidA(intj1;
classC:publicvoidf3();C()intj3;int
f2()能否訪問能訪問f1()、j1,不能訪問 b能否訪問能訪問f1(),不能訪問i1和 f3()能否訪問f2()、i2和以及f1(),j1和int classB:publicvoidf2();B()intj2;int
void{ABC}
f3能訪問f2()和j2,以及f1()j1,但不能訪問i1和例11.4多級派生的訪問屬性 //基inti;voidf2();intj;intk;classBpublic //public方voidf3();voidf4();intm;classCprotected //protected方voidf5();intn;派生類的構(gòu)造函數(shù)和析構(gòu)函*用戶在聲明類時(shí)可以不定義構(gòu)造函數(shù),系統(tǒng)會自動設(shè)置一個(gè)默認(rèn)的構(gòu)造函數(shù),在定義類對象時(shí)會自動調(diào)用這個(gè)默認(rèn)的構(gòu)造函數(shù)。這個(gè)構(gòu)造函數(shù)實(shí)際上是一個(gè)空函數(shù),不執(zhí)行任何操作。如果需要對類中的數(shù)據(jù)成員初始化,應(yīng)自己定義構(gòu)造函數(shù)。構(gòu)造函數(shù)的主要作用是對數(shù)據(jù)成員初始化。在設(shè)計(jì)派生類的構(gòu)造函數(shù)時(shí),不僅要考慮派生類所增加的數(shù)據(jù)成員的初始化,還應(yīng)當(dāng)考慮基類的數(shù)據(jù)成員初始化。也就是說,希望在執(zhí)行派生類的構(gòu)造函數(shù)時(shí),使派生類的數(shù)據(jù)成員和基類的數(shù)據(jù)成員同時(shí)都被初始化。解決這個(gè)問題的思路是:在執(zhí)行派生類的構(gòu)造函數(shù)時(shí)簡單的派生類的構(gòu)造函任何派生類都包含基類的成員,簡單的派生類只有一個(gè)基類,而且只有一級派生。例11.5簡單的派生類的構(gòu)造函#include<iostream>usingnamespacestd;class //聲明基類Student(intn,stringnam,char //基類構(gòu)造函sex=s;}~Student(){} intnum;stringname;charsex;classStudent1:public //聲明派生類 //派生類的公Student1(intn,stringnam,chars,inta,string// }voidshow({cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;cout<<″age:″<<age<<endl;cout<<″address:″<<addr<<endl<<endl;}~Student1( //派生類析構(gòu)函 intage;string注意派生類構(gòu)造函數(shù)首行的寫法的一般形式為派生類構(gòu)造函數(shù)名(總參數(shù)表列):基類構(gòu)造函數(shù)名(參數(shù)表列{派生類中新增數(shù)據(jù)成員初始化語句intmain({Student1stud1(10010,″Wang-li″,′f′,19,″115BeijingRoad,Shanghai″);Student1stud2(10011,″Zhang-fun″,′m′,21,″213ShanghaiRoad,Beijing″);stud1.show(); stud2.show //輸出第二個(gè)學(xué)生的數(shù)return}address:115Beijingaddress:213Shanghai可以將構(gòu)造函數(shù)改寫為以下形式Student1(intn,stringnam,chars,inta,string這樣函數(shù)體為空,更顯得簡單在建立一個(gè)對象時(shí),執(zhí)行構(gòu)造函數(shù)的順序是①派生類構(gòu)造函數(shù)先調(diào)用基類構(gòu)造函數(shù)~Student1,再執(zhí)行其基類析構(gòu)函數(shù)~Student(11.5.3多層派生時(shí)的構(gòu)造函一個(gè)類不僅可以派生出一個(gè)派生類,派生類還可以繼續(xù)派生,形成派生的層次結(jié)構(gòu)。在上面敘述的基礎(chǔ)上,不難寫出在多級派生情況下派生類的構(gòu)造函數(shù)。例11.7多級派生情況下派生類的構(gòu)造函數(shù)#include<iostream>usingnamespacestd;classStudent//聲明基 //公用部Student(intn,stringnam //}voiddisplay //輸出基類數(shù)據(jù)成} //保護(hù)部intnum; stringname;classStudent1:public //聲明公用派生類Student1(intn,charnam[10],inta):Student(n,nam)//派生類構(gòu)造函{age=a; //在此處只對派生類新增的數(shù)據(jù)成員初始voidshow( //輸出num,name和{display(); cout<<″age:″<<age<<endl;} //派生類的私有數(shù)int //增加一個(gè)數(shù)classStudent2:public //聲明間接公用派生類//下面是間接派生類構(gòu)Student2(intn,stringnam,inta,intvoidshow_all( // show(); }int //增加一個(gè)數(shù)intmain({Student2stud.show_all(); return0;}其派生關(guān)系如圖11.13所示初始化的順序是①先初始化基類的數(shù)據(jù)成員num和name②再初始化Student1的數(shù)據(jù)成員age③最后再初始化Student2的數(shù)據(jù)成員scorevoid{Cylinder1p;}classCylinder1:publicvoidcout<<"圓柱高}voidset(doublex1,doubley1,doubler1,double{Circle::set(x1,y1,r1);double{doubleR=getr();}classCircle{void{cout<<"圓心cout<<endl<<"半徑}voidset(doublex1,doubley1,double{x=x1;y=y1;r=r1; doublegetr(){returnr;}double[例11-(11)]多重繼聲明多重繼承的方如果已聲明了類A、類B和類C,可以聲明多重繼承的派生類classD:publicA,privateB,protected{類D新增加的成員是多重繼承的派生類,它以公有繼承方式繼承A類,以私有繼承方式繼承B類,以保護(hù)繼承方式繼承C類。按不同的繼承方式的規(guī)則繼承C的屬性,確定各基類的成員在派生類中的訪問權(quán)限。多繼承派生類的構(gòu)造函多重繼承派生類的構(gòu)造函數(shù)形式與單繼承時(shí)的構(gòu)造函數(shù)形式基本相同,只是在初始表中包含多個(gè)基類構(gòu)造函數(shù)。如:派生類構(gòu)造函數(shù)名(總參數(shù)表列):基類1構(gòu)造函數(shù)(參數(shù)表列基類2構(gòu)造函數(shù)(參數(shù)表列基類3構(gòu)造函數(shù){派生類中新增數(shù)據(jù)成員初始化語句派生類構(gòu)造函數(shù)的執(zhí)行順序同樣為先調(diào)用基類的調(diào)用基類構(gòu)造函數(shù)的順序是按照聲明派生類時(shí)父基類派生的順序。如上為:基類1、基類2、基類311.8繼承與組在一個(gè)類中以另一個(gè)類的對象作為數(shù)據(jù)成員的,稱為類的組合(compn。例如,聲明Professor(教授)類是ar(教師)類的派生類,另有一個(gè)類ate(生日),包含,mont,da等數(shù)據(jù)成員??梢詫⒔淌谏盏男畔⒓尤氲絇rofessor類的聲明中。如voiddisplay();intnum;charname[20];charsex;)//{num=n;})//{cout<<"學(xué)號:"<<num<<“姓名:"<<name<<“性別classBirthDate定義生日{(diào)//BirthDate類構(gòu)造函voiddisplay();intyear;intmonth;intday;voidBirthDate::display()//BirthDate類輸出函{cout<<"出生日classProfessor:public //教授voiddisplay();charproGrade; BirthDatebirthday; Professor::Professor(intn,charnam[20],chars,inty,intm,in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲軟件發(fā)布及授權(quán)使用合同
- 專業(yè)律師事務(wù)所有償法律咨詢合同
- 2025年錘紋漆合作協(xié)議書
- 房屋裝修半包合同樣本
- 借款抵押車輛合同
- 解決方案研討會邀請函
- 品牌租賃住宅合同
- 人才服務(wù)協(xié)議書
- 土地儲備與開發(fā)合作協(xié)議
- Recycle 2(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版英語五年級上冊
- 歷史類常識經(jīng)典考試題100題帶答案(能力提升)
- 水利水電工程建設(shè)用地設(shè)計(jì)標(biāo)準(zhǔn)(征求意見稿)
- 《了解紋樣》參考課件
- (正式版)JBT 2603-2024 電動懸掛起重機(jī)
- 小學(xué)信息技術(shù)-第8冊全冊-6年級下-電子工業(yè)出版社
- 《網(wǎng)絡(luò)攻擊與防御》課件第四章 基于系統(tǒng)的攻擊與防御
- 口腔醫(yī)學(xué)美學(xué)口腔攝影
- 供電一把手講安全課
- 健康生活的五大要素
- JTG∕T F30-2014 公路水泥混凝土路面施工技術(shù)細(xì)則
- 篆刻學(xué)全套課件
評論
0/150
提交評論