




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
類的繼承與派生
保持已有類的特性而構(gòu)造新類的過程
稱為繼承。
在已有類的基礎(chǔ)上新增自己的特性而
產(chǎn)生新類的過程稱為派生。
被繼承的已有類稱為基類(或父類)。
派生出的新類稱為派生類(或子類)。
■
2
類的繼承與派生
定義學(xué)生基本情況類Student:
classStudent
{private:
intNo;
charName[8];
intAge;
charSex[2];
public:
★¥
};
3
類的繼承與派生
定義學(xué)生成績類score:
classScore
{private:
intNo;
charName[8];
intAge;
charSex[2];
floatPhi,Math,Ave;
public:
};
4
類的繼承與派生
該例中,定義了7生基本情況類二
student與學(xué)生成績類Score,顯然學(xué)
生成績類有與學(xué)生基本情況類完全相
同的數(shù)據(jù)成員。如果在定義學(xué)生成績
類Scored,能從student類繼承其數(shù)
據(jù)成員No、Name、Age、Sex及處
理這些數(shù)據(jù)的成員函數(shù),則在編寫學(xué)
生成績類Score時會減少許多編程的
工作量。使用C++中的繼承與派生即
可實現(xiàn)上述目的?!?gt;
5
類的繼承與派生
使用繼承來定義平生成績類score:
classScore:publicStudent
{private:
floatPhi,Math,Ave;
public:
■■■
};
序
序
修
原
然
改
守
后
程
比
程
顯
,
大
句
多
扁
在
型
許
寫
序
少
語
了
程
,
時
節(jié)
扁
以
的
間
大
程
這
可
約
量9
。
6
繼承與派生問題舉例
例:編寫程序?qū)Υ髮W(xué)里的人員進行管理。
大學(xué)里的人員主要由學(xué)生,教師(教課)、
職員(不教課)和在職進修教師(既當學(xué)
生又當教師)組成,各類人員均有姓名、
電話和住址等信息,學(xué)生另有專業(yè)信息,
職員另有所在部門及工資信息,教師另有
講授課程信息,在職進修教師具備以上得*
類人員的信息。+
7
繼承與派生問題舉例
*
8
繼承與派生問題舉例
類
的
繼
承
與
派
生
9
繼承與派生問題舉例
繼承與派生的的
繼承的目的:實現(xiàn)代碼重用。
派生的目的:當新的問題出現(xiàn),原有
程序無法解決(或不能完全解決)時,
需要對原有程序進行改造。
11
派生類的聲明
類
的
繼class派生類名:繼承方式基類名
承
(
與
派派生類新成員聲明;
生}
★¥
12
繼承方式
三種繼承方式
-公有繼承(public)
-私有繼承(private)
-保護繼承(protected)
注:若省略繼承方式,則默認為private方式。
不同繼承方式的影響主要體現(xiàn)在:
派生類成員(即類內(nèi))對基類成員的訪問權(quán)限
通過派生類對象(即類外)對基類成員的訪問
權(quán)限
13
公有繼承(public)
類
成基類的public和protected成員的訪問
員屬性在派生類中保持不變,但基類的
的private成員不可直接訪問。
訪派生類中的成員函數(shù)可以直接訪問基類
問中的public和protected成員,但不能
控直接訪問基類的private成員。
制
通過派生類的對象只能訪問基類的
public成員?!颹
14
例74公布繼承舉例
類
成classPoint〃基類Point類的聲明
員{public:〃公有函數(shù)成員
的voidlnitP(floatxx=0,floatyy=0)
{X=xx;Y=yy;}
訪
voidMove(floatxOff,floatyOff)
問{X+=xOff;Y+=yOff;}
控floatGetX(){returnX;}
制floatGetY(){returnY;}
private:〃拓有數(shù)據(jù)成員
floatX,Y;
);
15
classRectangle:publicPoint〃派生類聲明
(
public:〃新增公有函數(shù)成員
voidlnitR(floatx,floaty,floatw,floath)
{lnitP(x,y);W=w;H=h;}〃調(diào)用基類公有成員函數(shù)
floatGetH(){returnH;}
floatGetW(){returnW;}
private:〃新增私有數(shù)據(jù)成員
floatW,H;
);
16
#include<iostream>
#include<cmath>
usingnamespacestd;
intmain()
{Rectanglerect;
rect.lnitR(232040);〃設(shè)置矩形的數(shù)據(jù)
〃通過派生類對象訪問基類公有成員
rect.Move(3,2);〃移動矩形的位置
cout?rect,GetX()?7
?rectGetY()?,,i
?rectGetH()?7運行結(jié)果:
?rectGetW()?endl;5,5,20,10
return0;
)17
私有繼承(private)
類
成基類的public和protected成員者B以
員private身份出現(xiàn)在派生類中,但基類
的的private成員不可直接訪問。
訪派生類中的成員函數(shù)可以直接訪問基
問類中的public和protected成員,但
控不能直接訪問基類南private成員。
制通過派生類的對象不能直接訪問基類
中的任何成員。A
■
18
例7?2私有繼承舉例
類
classRectangle:privatePoint〃派生類聲明
成
{public:〃新增外部接口
員voidlnitR(floatx,floaty,floatw,floath)
的{lnitP(x,y);W=w;H=h;}〃訪問基類公有成員
訪voidMove(floatxOff,floatyOff)
{Point::Move(xOff,yOff);}
問floatGetX(){returnPoint::GetX();}
控floatGetY(){returnPoint::GetY();}
制floatGetH(){returnH;}
floatGetW(){returnW;}
private:〃新增私有數(shù)據(jù)
floatW,H;
);
19
#include<iostream>
#include<cmath>
usingnamecpacestd;
intmain()
(〃通過派生類對象只能訪問本類成員
Rectanglerect;
rectlnitR(2,3,20,10);
rect.Move(3,2);
,,
cout?rect.GetX()?7?rect.GetY()?J
?rectGetH()?,,,?rectGetW()?endl;
return0;
}
20
思考:私有繼承在實際應(yīng)用中很少
使用,為什么?
21
保護繼承(protected)
類
成基類的public和protected成員者B以
員protected身份由現(xiàn)在派生類中,但
的基類的private成員不可直接訪問。
訪派生類中的成員函數(shù)可以直接訪問基
問類中的public和protected成員,但
控不能直接訪問基類南private成員。
制通過派生類的對象不能直接訪問基類
中的任何成員A
■
22
protected成員的特點與作用
類
成保護成員同時具有公有成員和私有成員的
員特征。
的對建立其所在類對象的模塊來說,它與
訪private成員的性質(zhì)相同。
問對于其派生類來說,它與public成員的性
質(zhì)相同。因此,為便于派生類的訪問,可
控
將基類私有成員中需要提供給派生類訪問
制的成員定義為保護成員。
既實現(xiàn)了數(shù)據(jù)隱藏,又方便繼承,實現(xiàn)《*
碼重用。
★
23
例7?3protected成員舉例
類
成classA{
員protected:
的intx;
訪
問)
控intmain()
制(
Aa;
a.x=5;〃錯誤
)
24
classA{
protected:
intx;
)
classB:publicA{
public:
voidFunction();
);
voidB:Function()
(
x=5;〃正確
)
25
classA{
private:
intx;
)
classB:publicA{
public:
voidFunction();
);
voidB:Function()
(
x=5;〃錯誤
)
26
總結(jié):
?派生類不僅繼承了基類的成員,而且還擁有自己的成
員,同時派生類可對一些繼承來的函數(shù)重新定義,以
適應(yīng)新的要求。
注:基類的構(gòu)造函數(shù)和析構(gòu)函數(shù)不被繼承,其余成
員全部繼承。
繼承方式為public時,基類的public和protected成
員的訪問屬性在派生類中保持不變。
繼承方式為private時,基類的pubIic和protected成
員的訪問屬性在派生類中變?yōu)閜rivate成員。十
繼承方式為protected時,基類的public密
protected成員的訪問屬性在派生類中變勢
27
總結(jié):
?無論按哪種繼承方式繼承,基類的private成員在
派生類中都不能直接訪問,只能通過基類的成員
函數(shù)來訪問這些基類的私有成員;這與私有成員
的定義是一致的,符合數(shù)據(jù)封裝的思想。
?在類的層次結(jié)構(gòu)中,處于高層的類表示最一般的
特征,而處于低層的類則表示更具體的特征。
★★
28
類型兼容規(guī)則
類
一個公有派生類的對象在使用上可以
型
被當作基類的對象,反之則禁止。具
兼
體表現(xiàn)在:
容
派生類的對象可以被賦值給基類對象。
派生類的對象可以初始化基類的引用。
指向基類的指針也可以指向派生類。
通過基類對象名、指針只能使用從基
類繼承的成員上
■
29
7
規(guī)
4
?
例
類
型
兼
容
則
舉
例
類
n
<
i
r
e
m
a
i
#
d
l
c
e
o
t
s
>
型u
u
s
g
p
s
m
n
n
i
a
c
e
e
a
c
t
;
兼d
s
a
O
B
l
c
s
B
O
〃
基
類
聲
容明
c
i
{
u
:
p
l
b
i
vo
d
i
i
,
i
(
O
B
:
:
l
n
d
i
p
l
s
c
y
?
)
o
u
t
d
i
p
l
(
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班義工活動方案
- 小學(xué)金話筒比賽活動方案
- 小年烘焙活動策劃方案
- 工會安全活動方案
- 山區(qū)春節(jié)活動方案
- 小小職業(yè)體驗活動方案
- 干部聯(lián)誼活動方案
- 平臺讓利活動方案
- 小米上線米粉節(jié)活動方案
- 展架護膚活動策劃方案
- DL∕T 516-2017 電力調(diào)度自動化運行管理規(guī)程
- 江蘇省鹽城市東臺市2023-2024學(xué)年八年級下學(xué)期期末英語試卷(含答案解析)
- 住院成人高血糖患者血糖監(jiān)測醫(yī)護協(xié)議處方共識
- 古希臘文明智慧樹知到期末考試答案章節(jié)答案2024年復(fù)旦大學(xué)
- 服裝工藝師崗位職責
- 2024年江蘇省南通市如東縣政府購買崗招聘92人重點基礎(chǔ)提升難、易點模擬試題(共500題)附帶答案詳解
- 2024年廣東省廣州市天河區(qū)七年級(下)期末數(shù)學(xué)試卷含答案
- 深圳市體育場館租賃合同
- 福建省廈門市廈門一中2024年數(shù)學(xué)高一下期末質(zhì)量檢測試題含解析
- 2023-2024學(xué)年北京市海淀區(qū)清華附中物理八下期末綜合測試模擬試題及答案解析
- 軸承座基本工藝專業(yè)課程設(shè)計
評論
0/150
提交評論