IT計算機課件c++第7章_第1頁
IT計算機課件c++第7章_第2頁
IT計算機課件c++第7章_第3頁
IT計算機課件c++第7章_第4頁
IT計算機課件c++第7章_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

類的繼承與派生

保持已有類的特性而構造新類的過程

稱為繼承。

在已有類的基礎上新增自己的特性而

產(chǎn)生新類的過程稱為派生。

被繼承的已有類稱為基類(或父類)。

派生出的新類稱為派生類(或子類)。

2

類的繼承與派生

定義學生基本情況類Student:

classStudent

{private:

intNo;

charName[8];

intAge;

charSex[2];

public:

★¥

};

3

類的繼承與派生

定義學生成績類score:

classScore

{private:

intNo;

charName[8];

intAge;

charSex[2];

floatPhi,Math,Ave;

public:

};

4

類的繼承與派生

該例中,定義了7生基本情況類二

student與學生成績類Score,顯然學

生成績類有與學生基本情況類完全相

同的數(shù)據(jù)成員。如果在定義學生成績

類Scored,能從student類繼承其數(shù)

據(jù)成員No、Name、Age、Sex及處

理這些數(shù)據(jù)的成員函數(shù),則在編寫學

生成績類Score時會減少許多編程的

工作量。使用C++中的繼承與派生即

可實現(xiàn)上述目的?!?gt;

5

類的繼承與派生

使用繼承來定義平生成績類score:

classScore:publicStudent

{private:

floatPhi,Math,Ave;

public:

■■■

};

,

節(jié)

量9

。

6

繼承與派生問題舉例

例:編寫程序對大學里的人員進行管理。

大學里的人員主要由學生,教師(教課)、

職員(不教課)和在職進修教師(既當學

生又當教師)組成,各類人員均有姓名、

電話和住址等信息,學生另有專業(yè)信息,

職員另有所在部門及工資信息,教師另有

講授課程信息,在職進修教師具備以上得*

類人員的信息。+

7

繼承與派生問題舉例

*

8

繼承與派生問題舉例

9

繼承與派生問題舉例

繼承與派生的的

繼承的目的:實現(xiàn)代碼重用。

派生的目的:當新的問題出現(xiàn),原有

程序無法解決(或不能完全解決)時,

需要對原有程序進行改造。

11

派生類的聲明

繼class派生類名:繼承方式基類名

(

派派生類新成員聲明;

生}

★¥

12

繼承方式

三種繼承方式

-公有繼承(public)

-私有繼承(private)

-保護繼承(protected)

注:若省略繼承方式,則默認為private方式。

不同繼承方式的影響主要體現(xià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;}〃調用基類公有成員函數(shù)

floatGetH(){returnH;}

floatGetW(){returnW;}

private:〃新增私有數(shù)據(jù)成員

floatW,H;

);

16

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain()

{Rectanglerect;

rect.lnitR(232040);〃設置矩形的數(shù)據(jù)

〃通過派生類對象訪問基類公有成員

rect.Move(3,2);〃移動矩形的位置

cout?rect,GetX()?7

?rectGetY()?,,i

?rectGetH()?7運行結果:

?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

思考:私有繼承在實際應用中很少

使用,為什么?

21

保護繼承(protected)

成基類的public和protected成員者B以

員protected身份由現(xiàn)在派生類中,但

的基類的private成員不可直接訪問。

訪派生類中的成員函數(shù)可以直接訪問基

問類中的public和protected成員,但

控不能直接訪問基類南private成員。

制通過派生類的對象不能直接訪問基類

中的任何成員A

22

protected成員的特點與作用

成保護成員同時具有公有成員和私有成員的

員特征。

的對建立其所在類對象的模塊來說,它與

訪private成員的性質相同。

問對于其派生類來說,它與public成員的性

質相同。因此,為便于派生類的訪問,可

將基類私有成員中需要提供給派生類訪問

制的成員定義為保護成員。

既實現(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

總結:

?派生類不僅繼承了基類的成員,而且還擁有自己的成

員,同時派生類可對一些繼承來的函數(shù)重新定義,以

適應新的要求。

注:基類的構造函數(shù)和析構函數(shù)不被繼承,其余成

員全部繼承。

繼承方式為public時,基類的public和protected成

員的訪問屬性在派生類中保持不變。

繼承方式為private時,基類的pubIic和protected成

員的訪問屬性在派生類中變?yōu)閜rivate成員。十

繼承方式為protected時,基類的public密

protected成員的訪問屬性在派生類中變勢

27

總結:

?無論按哪種繼承方式繼承,基類的private成員在

派生類中都不能直接訪問,只能通過基類的成員

函數(shù)來訪問這些基類的私有成員;這與私有成員

的定義是一致的,符合數(shù)據(jù)封裝的思想。

?在類的層次結構中,處于高層的類表示最一般的

特征,而處于低層的類則表示更具體的特征。

★★

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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論