




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++大學(xué)基礎(chǔ)教程第8章繼承與派生
北京郵電大學(xué)信通院 網(wǎng)絡(luò)搜索中心2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-2-第8章繼承與派生8.1繼承的概念8.2繼承方式8.3派生類構(gòu)造函數(shù)的定義8.4多繼承2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-3-第8章繼承與派生面向?qū)ο蟮奶卣?/p>
1、封裝性2、繼承性
3、多態(tài)性繼承的作用:軟件重用2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-4-繼承的概念普通自行車2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-5-繼承的概念雙人自行車2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-6-繼承的概念比賽自行車2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-7-繼承的概念山地自行車2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-8-繼承的概念2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-9-
8.1繼承的概念
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-10-8.1繼承的概念
類的繼承:是在現(xiàn)有類的基礎(chǔ)之上,創(chuàng)建新類的機(jī)制。稱現(xiàn)有的類為基類,新建立的類為派生類。新類繼承了基類的屬性和行為新類是基類的特殊情況。繼承是處理“特殊情況”的面向?qū)ο缶幊虣C(jī)制
-11-繼承的概念基類(父類)派生類(子類)派生類派生類2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-12-單繼承
派生類只有一個(gè)直接基類的繼承多繼承
派生類有多個(gè)直接基類的繼承直接基類
派生出子類的父類稱為該子類的直接基類間接基類
父類的父類稱為該子類的間接基類繼承的概念A(yù)BCABC2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-13-
8.2繼承方式
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-14-派生類的定義格式
class派生類名:繼承方式
基類名{public://派生類公有成員…
protected://派生類保護(hù)成員…
private://派生類私有成員…};派生類只有一個(gè)直接基類為單繼承繼承方式:publicprivateprotected2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-15-例子基類:shape:位置、顏色派生類:
Circle:位置、顏色、半徑、畫圓Rectangle:位置、顏色、長、寬、畫矩形triangle:位置、顏色、邊長、畫三角形-16-例:定義基類shapeclass
shape{protected:
int
m_x,m_y;//位置
char
m_color;//顏色public:
void
setposition(int
x,int
y);
void
setcolor(char
color);
int
getx()const;
int
gety()const;
char
getcolor()const;};-17-定義派生類(圓形類)classCircle:publicShape{public:
Circle(int
x,int
y,floatr,char
color='R');
float
GetRadius()const;
void
SetCircle(int
x,int
y,float
r,char
color);
void
Draw();protected:
float
m_radius;};-18-定義派生類(等邊三角形類)classTriangle:publicShape{public:
Triangle(int
x,int
y,char
color='R',float
slen=1);
float
GetSideLength()const;
void
SetTriangle(int
x,int
y,char
color,float
slen);
void
Draw();private:
float
m_SideLength;};-19-定義派生類(矩形類)classRectangle:publicShape{public:
Rectangle(int
x,int
y,char
color='R',intLength=5,int
width=5);
float
GetWidth()const;
float
GetHeight()const;
void
SetRectangle(int
x,int
y,char
color,intLength,int
width);
void
Draw();private:
float
m_Width,m_Length;};2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-20-派生新類:circle圓形rectangle矩形triangle三角形
基類稱為父類派生類稱為子類
shapecirclerectangletriangle2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-21-派生類的定義格式
class派生類名:繼承方式基類名1,…繼承方式基類名n{public://派生類公有成員…
protected://派生類保護(hù)成員…
private://派生類私有成員…};有多個(gè)基類派生類有多個(gè)基類為多繼承2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-22-例:已有基類base1,base2,base3,定義派生類deriverclassderiver:publicbase1,publicbase2,privatebase3{private:
int
m_derdata;public:
void
derfunction();};2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-23-8.2派生類的繼承派生類的成員包括
1、基類的成員(構(gòu)造函數(shù)和析構(gòu)函數(shù)除外)
2、派生類定義的成員軟件復(fù)用2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-24-8.2派生類的繼承問題:派生類的成員和基類的成員同名?
派生類的成員覆蓋基類的同名成員,即派生類的對象只能訪問到派生類的同名成員。2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-25-同名覆蓋的例子classbase{public:voidprint(){cout<<“basefunction”<<endl;}};classderiver:publicbase{public:voidprint(){cout<<“deriverfunction”<<endl;}};voidmain(){base*pBobj;
pBobj->print();deriverobj;
pBobj=&obj;pBobj->print();}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-26-同名覆蓋的思考1、派生類和基類的成員函數(shù)名相同,但形參不同,或返回值不同,則派生類對象能夠調(diào)用基類的同名成員嗎?2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-27-8.2繼承方式繼承方式的作用
派生類對象:對基類成員的訪問控制繼承方式的作用范圍
只用于限制對緊隨其后之基類的繼承三種繼承方式
公有繼承public
保護(hù)繼承protected
私有繼承private
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-28-1.公有繼承
公有繼承的派生類定義形式:
class派生類名:public
基類名{派生類新成員定義;}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-29-2.私有繼承
私有繼承的派生類定義形式:
class派生類名:private
基類名{派生類新成員定義;}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-30-3.保護(hù)繼承保護(hù)繼承的派生類定義形式:class派生類名:protected
基類名{派生類新成員定義;}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-31-8.2繼承方式類成員的存取方式存取方式本類成員函數(shù)派生類成員函數(shù)類對象private√××protected√√×public√√√2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-32-8.2繼承方式派生類繼承后的基類成員的存取方式繼承方式基類存取方式privateprotectedpublicprivateprivateprivateprivateprotectedprivateprotectedprotectedpublicprivateprotectedpublic2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-33-8.2繼承方式小結(jié)實(shí)際上我們使用繼承時(shí),都是公有繼承,私有和保護(hù)繼承僅僅在理論上討論。2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-34-
8.3派生類的構(gòu)造函數(shù)
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-35-8.3派生類構(gòu)造函數(shù)的定義
派生類繼承的特殊性
基類中的構(gòu)造函數(shù)和析構(gòu)函數(shù)不能繼承派生類需要自己定義構(gòu)造函數(shù)和析構(gòu)函數(shù)。2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-36-8.3派生類構(gòu)造函數(shù)的定義派生類的構(gòu)造函數(shù)要求:
1、基類構(gòu)造函數(shù)需要的參數(shù)
2、內(nèi)嵌對象需要的初始化參數(shù)
3、本類基本數(shù)據(jù)類型需要的參數(shù)2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-37-8.3派生類構(gòu)造函數(shù)的定義派生類的構(gòu)造函數(shù)
派生類名::派生類名(基類的形參,本類的形參):基類名(參數(shù)),對象成員(參數(shù))
{
//函數(shù)體
}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-38-8.3派生類析構(gòu)函數(shù)的定義派生類的析構(gòu)函數(shù)的作用只負(fù)責(zé)清理它新定義的非對象數(shù)據(jù)成員,對象數(shù)據(jù)成員由對象成員所屬類的析構(gòu)函數(shù)負(fù)責(zé)析構(gòu)。-39-派生與繼承的實(shí)例
公司人員管理系統(tǒng):
小型公司人員分為:經(jīng)理、兼職技術(shù)人員、銷售經(jīng)理和兼職推銷員.要求:存儲所有人員的姓名、編號、級別、當(dāng)月薪水,計(jì)算月薪總額并顯示全部信息。人員編號在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號順序加1。程序能夠?qū)Σ煌藛T按不同方法計(jì)算月薪:經(jīng)理拿固定月薪;兼職技術(shù)人員按工作小時(shí)數(shù)領(lǐng)取月薪;兼職推銷員的報(bào)酬按該推銷員當(dāng)月銷售額提成;銷售經(jīng)理既拿固定月薪也領(lǐng)取銷售提成。
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-40-派生與繼承的實(shí)例
分析:
1、描述全體職員的共性(基類)2、每一類特殊人員(派生類)之間的關(guān)系,描述各自特有的屬性或行為虛擬繼承EmployeeTechnicianManagerSalemanSaleManager2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-41-派生與繼承的實(shí)例1、描述全體職員的共性(基類)屬性:姓名、編號、級別、當(dāng)月薪水行為:顯示全部信息靜態(tài)成員:人員信息編號-42-class
employee{protected:
char
name[10]; //姓名
int
EmpNo; //編號
int
grade; //級別
float
accumPay; //月薪總額
static
int
employeeNo; //本公司職員編號目前最大值public:
employee(char*newN,intnewG);//構(gòu)造函數(shù)
~employee(); //析構(gòu)函數(shù)
void
displayStatus(); //顯示人員信息};
-43-classManager:public
employee{protected:
float
salary;public:
Manager(char
*newName,int
newGrade,float
newS);
void
pay();//計(jì)算月薪函數(shù)
void
displayStatus(); //顯示全部信息};新增加的成員同名覆蓋,改造基類成員
構(gòu)造函數(shù)-44-classTechnician:public
employee{protected:
int
workhour;
float
hourlyrate;public:
Technician(char*newName,int
newGrade);//構(gòu)造函數(shù)
void
pay(); //計(jì)算月薪函數(shù)
void
displayStatus(); //顯示全部信息};新增加的成員同名覆蓋,改造基類成員
構(gòu)造函數(shù)-45-classsaleman:public
employee{protected:
float
salesamount;//銷售額
float
persale;//提成比率public:
saleman(char*newName,int
newGrade);
void
pay(); //計(jì)算月薪函數(shù)
void
displayStatus(); //顯示全部信息};新增加的成員同名覆蓋,改造基類成員
構(gòu)造函數(shù)-46-classsaleManager:public
employee{protected:
float
salary;
float
salesamount;
float
persale;public:
saleManager(char*newName,int
newGrade,float
newS);
void
pay(); //計(jì)算月薪函數(shù)
void
displayStatus(); //顯示全部信息};新增加的成員同名覆蓋,改造基類成員
構(gòu)造函數(shù)2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-47-Manager::Manager(char*newName,intnewGrade,float
newS):employee(newName,newGrade),salary(newS){}void
Manager::pay(){
cout<<"固定月薪:"<<salary<<",是否更新?(Y/N)";
char
ch; cin>>ch;
if(ch=='y') {
cout<<"請重新輸入經(jīng)理月薪:"; cin>>salary; }
accumPay=salary;}構(gòu)造函數(shù)2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-48-void
Manager::displayStatus(){ cout<<"姓名:"<<name<<endl;cout<<"編號:"<<EmpNo<<endl; cout<<"級別:經(jīng)理"<<endl; cout<<"固定月薪:"<<accumPay<<endl;}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-49-voidmain(){ Managerm("李寧",1,5000); m.pay(); m.displayStatus(); Techniciant("王二",2); t.pay(); t.displayStatus(); salemans("張三",3);s.pay(); s.displayStatus();saleManagersm("周君",4,3000); sm.pay(); sm.displayStatus();}2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-50-繼承的含義派生類的成員包括:1.從基類繼承的成員;2.改造基類成員;3.添加派生類新成員.2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-51-9.3派生類構(gòu)造函數(shù)的定義構(gòu)造函數(shù)的調(diào)用順序
1、基類的構(gòu)造函數(shù)
2、內(nèi)嵌對象的構(gòu)造函數(shù)
3、派生類的構(gòu)造函數(shù)析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)的調(diào)用順序正好相反2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-52-
8.4多繼承
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-53-8.4多繼承8.4.1多繼承與二義性多繼承類結(jié)構(gòu)中,派生類可能有多個(gè)直接基類或間接基類,充分體現(xiàn)了軟件重用的優(yōu)點(diǎn),但也可能會引起成員訪問的二義性或不確定性問題。-54-employeeManagersalemansalemanagerNameEmpNoGradeaccumPay……ManagerNameEmpNoGradeaccumPay……saleman……salemanagerSalemanager中調(diào)用Name時(shí),產(chǎn)生二義性2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-55-8.4.2虛基類
為解決二義性問題,將共同基類設(shè)置為虛基類,創(chuàng)建派生類對象時(shí),虛基類的構(gòu)造函數(shù)只會調(diào)用一次,虛基類的成員在第三層派生類對象中就只有一份拷貝,不會再引起二義性問題。2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-56-虛基類
語法形式:
class派生類名:virtual
繼承方式基類名{//……}在多繼承情況下,虛基類關(guān)鍵字的作用范圍和繼承方式關(guān)鍵字相同,只對緊隨其后的基類起作用。
2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-57-虛基類
注意:在第一級繼承時(shí)就要將共同基類設(shè)計(jì)為虛基類。2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-58-多繼承派生類構(gòu)造函數(shù)的定義
在包含虛基類的繼承結(jié)構(gòu)中,系統(tǒng)在建立派生類的對象時(shí),調(diào)用構(gòu)造函數(shù)的順序是:(1)虛擬基類的構(gòu)造函數(shù);(2)非虛擬基類的構(gòu)造函數(shù);(3)內(nèi)嵌對象的構(gòu)造函數(shù);(4)派生類的構(gòu)造函數(shù)。-59-習(xí)題:補(bǔ)全派生類的構(gòu)造函數(shù)classA{public:
inti;A(inta){i=a;}
virtualvoidprint(){cout<<“A”<<endl;}};classB:publicA{public:
intj;voidprint(){cout<<“B”<<endl;}};classC:publicB{public:
intk;voidprint(){cout<<“C”<<endl;}};2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-60-作業(yè)課后第6題2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-61-復(fù)習(xí)第8章1、單繼承2、多繼承3、虛擬繼承
ABCABC-62-
classA{public:
inti;A(inta){i=a;}};classB:publicA{public:
intj;B(inta,intb):A(a){j=b;}};classC:publicB{public:
intk;C(inta,intb,intc):B(a,b){k=c;}};voidmain(){Cc(1,2,3);cout<<c.i<<endl;cout<<c.j<<endl;cout<<c.k<<endl;}ABCpublici=1publicj=2publick=3C()~C()C(C&)cpublici=1publicj=2B()~B()B(B&)B-63-
classA{public:
inti;A(inta){i=a;}};classB:privateA{public:
intj;B(inta,intb):A(a){j=b;}};classC:publicB{public:
intk;C(inta,intb,intc):B(a,b){k=c;}};voidmain(){Cc(1,2,3);cout<<c.j<<endl;cout<<c.k<<endl;}ABC不可見
i=1publicj=2publick=3C()cprivatei=1publicj=2B()B2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-64-A(inta){i=a;}B(inta,intb):A(a){j=b;}//直接基類C(inta,intb,intc):B(a,b){k=c;}//直接基類構(gòu)造順序:A->B->CABC2023/2/1北京郵電大學(xué)電信工程學(xué)院計(jì)算機(jī)技術(shù)中心-65-復(fù)習(xí)第8章1、單繼承2、多繼承3、虛擬繼承-66-
classA{public:
inti;A(inta){i=a;}};classB{public:
intj;B(intb){j=b;}};classC:publicA,publicB{public:
intk;C(inta,intb,intc):A(a),B(b){k=c;}};voidmain(){Cc(1,2,3);cout<<c.i<<endl;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 定向委托加工合同:度項(xiàng)目
- 煙花爆竹定制加工合同協(xié)議
- 城市規(guī)劃設(shè)計(jì)服務(wù)合同
- 14《普羅米修斯》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語文四年級上冊
- 購房者商品房分期付款合同
- 家庭和睦共建合同
- Module 3 Unit 1 What are you doing?(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語四年級上冊
- 10 我們當(dāng)?shù)氐娘L(fēng)俗2023-2024學(xué)年四年級下冊道德與法治同步教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 婚內(nèi)借款合同范本
- 2 江南 教學(xué)設(shè)計(jì)-2024-2025學(xué)年語文一年級上冊統(tǒng)編版
- 鋼筋平法識圖與鋼筋算量經(jīng)典課件
- 三年級下冊數(shù)學(xué)應(yīng)用題100題及答案
- 繼電保護(hù)課后習(xí)題答案第二版張保會尹項(xiàng)根
- 統(tǒng)編版高中歷史必修中外歷史綱要下冊第4課中古時(shí)期的亞洲課件(共18張PPT)
- 成人住院患者跌倒風(fēng)險(xiǎn)評估及預(yù)防,中華護(hù)理學(xué)會團(tuán)體標(biāo)準(zhǔn)
- 陰式子宮全切術(shù)-手術(shù)室護(hù)理查房
- 職業(yè)健康檢查流程圖
- 提高電費(fèi)回收率(QC)
- EIM Book 1 Unit 7 Learning languages單元知識要點(diǎn)
- 呼吸系統(tǒng)疾病與麻醉(薛張剛)
- WOMAC骨性關(guān)節(jié)炎指數(shù)評分表
評論
0/150
提交評論