IT計算機 第十一章物件醇向C++程式設計_第1頁
IT計算機 第十一章物件醇向C++程式設計_第2頁
IT計算機 第十一章物件醇向C++程式設計_第3頁
IT計算機 第十一章物件醇向C++程式設計_第4頁
IT計算機 第十一章物件醇向C++程式設計_第5頁
已閱讀5頁,還剩104頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

弟十一早

物件醇向C++程式^言十

(類直別典物件)

1

第十一章物件醇向C++程式考殳言十

(類直別典物件)

?在本章中,我伊K各正式it入物件醇向程式^言十的令直域,雖隹然

我偽在第一罩元中,已^使用謾某些C++函式康的物件(例

如:cin、cout),但郤未曾阜曾如何建立一彳固物件(事^上

建立物件必須先宣告類^別)。

-在本章中,我相?符彳他§1教您如何使用C++或以物件覲黠器殳言十程式,就

如同我相號提前使用cin、cout等物件,感:!;比scanf()、print%)方便很多,

道就是物件醇向程式言殳言十帶來的好慮,尤其是在彝展中大型事案畤,

物件醇向程式言殳言十更是目前最佳的解決之道。

2

大銅I

?11.1物件醇向程式言殳言十

-11.1.1物件(object)

-11.1.2類賓別(class)

?11.2物件醇向的三大特性

?11.3C++的類期J

?11.4C++的物件

-11.4.1宣告物件箕18

-11.4.2存取成員燮數(shù)典軌行成員函式

?11.5成員函式

-11.5.1定羲成員函式

-11.5.2透謾成員函式存取私用性資料燮數(shù)

大銅I

?11.6建橫函式典解橫函式

-11.6.1建橫函式

-11.6.2建橫函式的引數(shù)

-11.6.3覆載典建情函式

-11.6.4解情函式

?11.7覆載典成具函式多功能化

?11.8this指檄

?11.9友It函式

?11.10class典struct的比較

■11.11本章回H

4

11.1物件醇向程式需殳言十

?C++是一彳固物件蹲向程式三吾言(OOPL;Object-OrientedProgram

Language),所需物件醇向含殳言十理念,就是利用軟醴模擦現(xiàn)生活中

S8所掩有的特性典行懸,造些^醴就是物件,而每一偃I物件都可以掩有各

自的^性及方法,物件醇向程式言殳言十(Object-OrientedProgramming;

fflBOOP)是一槿以物件覲念來言殳言十程式的程式言殳言十技巧,它透謾物件

的方法羥生互勤以完成程式要求。

-在觸物件簿向的程式中,每一彳固建作^颼都可視卷某槿^別衍生出來的物件,

而類直別即較具抽象的概念,也就是某些具有共同特性物件的集合,換句言舌言兌,

物件就是類:!別的每他物件都掩有某些特性(attribute)輿行尚behavior),

在OOP中用廉之腐性(property)典方法(method)o原用J上每彳固物件互相

才蜀立且輾昌歌簫性,或具有封裝、^算子覆戴、畿承、資料曙藏、勤熊80吉等

特性。

5

11.1物件醇向程式需殳言十

-傅統(tǒng)的結(jié)情化程式^言十招冏題切割成^多小冏題(模幺且),由於適些模,且

的存在目的是卷了解決大冏題而言殳言十的,因此,道些模區(qū)且有可能存取同一

彳固資料東吉橫,道招醇致模名目之^的孑蜀立性^降低,例如冢多函式需要使用

同一他|睡列畤,必?就各之宣告卷全域燮數(shù)或透謾停址方式來控制障列元素

的燮化,^^您使用的是哪一槿方式,都輾法撤底保障^^列不畬因卷意

外的存取而改燮其元素值。若我憑想要招吾亥障列更改卷其他的資料東吉情畤,

所有存取^^列的函式都必須跟著改建。

?因此,結(jié)情化程式言殳言於!然能寸於某些冏題可以快速尊得解決方案,但封

於日彳爰的雒^仍得不足,而物件醇向程式含殳言十即以物件懸出樊黑占,藉

由物件典物件之^的互勤完成冏題的解答,比較符合真^世界璟境。因

卷每一彳固物件都是一彳固褐立的彳固1乳因此更勤某一物件的內(nèi)容日寺,其他

的物件加不需要跟隨著建勤。如此一來,在尊求大型或超大型方案的解

答日札不但比結(jié)情化程式言殳言十容易分析冏堰,更有助於日彳爰的雒^^修

改。

6

11.1.1物件(object)

■真^世界中的所有具醴或抽象的事物,都可以揩之視卷一他

『物件』。例如:您可以把一架來檄想像成是一彳固物件

(Object);而來檄的零件(例如:座椅、引擎、操^上旱)

即是較小的物件,明^地,造些物件仍營可以再余田分卷更小

的物件(例如:螺^金丁)。

-在程式^言十中,C++的物件其^是一些程式碼和資料幺且合,物件必須

能別I罩才蜀成卷一彳固完整罩元,也可以余且合成更大的物件。例如:視窗

程式言殳言十的按金丑或表罩都是一彳固物件。而一彳固鷹用程式最大的物件就

是愿用程式的本身。

7

11.1.1物件(object)

腐性(Property)

-物件掩有^多特性,it些特性代表了一彳固物件的外覲或某些性例

如:來檄物件的最高速度就代表了^來檄的一槿特性、來檄物件的重

量、越重量、、等等也都可以用來代表來檄的某些特性o造些特性在

物件醇向程式言殳言十中穗之卷腐性(Property),事壹上,有的畤候在

取得物件的某些腐性日寺,所得到的也可能是另一他(子)物件(若^

性的資料型魅也是一彳固物件)。例如:來檄的弓擎也是一彳固物件,

因卷它可以由更多更小的零件央幺且成,同畤引擎物件也存在自己的方

法(Method),例如:引擎鉆火。

-在程式^言十或軌行隋段,我相號可以藉由改建腐性值來改燮整彳固物件的

某些特性,完成我憑想要的物件表示形式。例如:招來檄物件的檄段

漆成St包。

-在C++言吾言中,腐性(Property)被耦卷成具資料燮數(shù),或且被II分

卷3槿等級,某些等級的成具資料燮敦她不允言午外部程式直接加以修

改,而必須透謾器亥物件的方法,才能別修改造些成員資料燮數(shù)。因此

可以逵到保^資料的目的。

8

11.1.1物件(object)

?方法(Method)

-每偃I物件都掩有不同數(shù)量的『方法』。不同槿類其的物件所掩有的方法大多

不同,但同^物件掩有的方法即大致相同。所需方法(Method),也就是卷

了完成物件某些目襟的慮理方式。例如:別的物件有三午多方法使

得來檄燮得有些用途,適些方法如起來、降落、逃生等等。每彳固方法都有

I■午多的黜第,例如起來,可能包含『樊勤引擎、、、、直到拉勤操旱』,

適些就是起來方法的東腌儲

-在C++中,仍符方法耦之卷函式(也就是成員函式),以便增加言愛好

者的接受度。同畤C++的成員函式也和成員資料燮數(shù)一檄,被癌分卷多槿等

級,某些等級的成員函式同棣不允考午外部程式直接加以軌行(只能做卷內(nèi)

部成員函式軌行的子函式),逵到封裝物件的功能。

-舉寸於某些由他人完成的物件而言,^物件同棣必須提供^多^於物件的方

法,如此一來,我便?就不需要了解道些方法的細WL而能匏I快速^用物件

央完成工作。

9

11.1.2類期ij(class)

-物件雎然是褐立的他It乳但不同的物件也可以掩有相同的腐性,例如:「一架民

航檄」和「一架戟黑」各7E偃I物件,雨者的速度、爬升力、重量、載重量St

不相同,但谷|3同檬掩有道些腐性以便表逵完整物件的各彳固特性。所以,不同的物

件若掩有共同的腐性,但由於腐性內(nèi)容的不同,因此可以含J造出同類鼾生^但谷

立的物件。而同類直型的物件,即橫成了^別。例如每一彳固按^都是7E一偃I物件,!

於按^類真別之下所建造出來的物件^18,但是由於按4a檄魅名耦的不同,因此祝

卷不同且褐立的物件。

更精碓地^別(c旦以上例^「民航檄」

和「戟1明檄」都是物件,而『來檄』或『來行器』才是類直別。不同的只是在建立^類直別

的^醴物件日寺,幺合予不同的腐性而已。事寰上,在^除的物件醇向程式考殳言十中(例如

C++),我優(yōu)必須先定羲類期k別的^性、方法,然彳灸才能剔透謾^別宣告各低闔於

,然彳爰再言殳定物件的腐性來代表^物件某方面的特性,加使用物件的方

O

?彳他由下而上的角度來看,類直別是言午多同類真物件的集合,所需同類直物件,代表掩有

相同腐性(資料燮數(shù))及方法(函式)的物件,例如:每一臺『來行器』類直別下

的物件,都包含「速度」、「爬升力」、「重量」、「戴重量」等燮數(shù),也包含

「起乘」、「降落」、「逃生」等方法,以便完成工作。由於我憑可以揩適些建

數(shù)言殳定卷不同的性值,因此可以在^類直別下造就了各式各檬的物件,如同「民

航檄」和「戟「4檄」各是7E一彳固物件,而『乘行器』即是類直別。

10

11.1.2類期ij(class)

一性:方法:

速度

來行器別)起

fl落t

生成/生成生成、、、、

/

客搬(物件)戟搬(物件)直昇梭(物件)

履性:方法:屬性:方法:腐性:方法:

速度=100速度=800速度=50

降落

降落

重量重量重量

逃=300=100

=500生

載重量=2000載重量=500載重量=1200

圄11-1類真別典物件的舊刑系I1

11

11.2物件醇向的三大特性

物件醇向器殳言十的三大特性是封裝性(encapsulation)、it承性(inheritance)、

多型性(polymophism)。

-以『封裝性』來言兌,它可以揩物件顯分卷可被外界使用的特性及受保^的內(nèi)

部特性;換句言舌^,除非是允言午外部程式存取的資料,否即外部程式輾法改

建物件內(nèi)的資料。

-而『畿承性』即是卷了逵成重覆使用目的所探取的一槿策略,例如:一彳固滑

鼠^別只要加上滾翰裝置,就燮成了滇翰滑鼠,但滾翰滑鼠也同檬可以上下

左右移勤改建指襟位置,也可以按雨下軌行程式,只不謾現(xiàn)在又多了一偃I滇

翰使得濯I直畤更加方便,事^上,道彳固滇翰滑鼠就由滑鼠遣停而杰的。

有了適項特性,在^^大型程式畤,我憑就可以延已^完成的技彳桿,再加

以^充。

-就『多型性』而言,其^它是一他非常抽象的名前]。聚例來者兌,所言胃^水人

人曾煮,各有巧妙不同,基本上,瓦斯煽、雷磁力直、熱水瓶都可以煮^水,

所以『煮^水』其^是一彳固相常抽象的名言司,使用瓦斯煽、雷磁煽、熟水瓶

的煮^水方式都不一檬,但『煮^水』一同郤涵蓋了適些差昊性的行懸,而

此槿特^即耦卷「多型性」(polymophism),多型性使得程式^言十具有更大的

弓勒性。

12

11.2物件醇向的三大特性

?上述物件醇向言殳言十的三大特性,C++其^全部都支援了,在本章中,您符

阜曾到C++如何完成物件醇向中敷:18元件的封裝性(Encapsulation)o

旋且在第13章彳爰,我憑招一一介貂C++的其他程式音殳言十技巧,適些言殳言十技

巧符足以完成物件醇向器殳言十的it承性(inheritance)及多型性

(polymophism)。

13

11.3C++的^利

遢言已得在C言吾言中定羲struct^橫骨斷寺,我何可以在結(jié)橫11中

定羲腐於^ft的資料成員喝?

-it彳固特性也被C++沿用下來。但在言中,軌行某一彳固函式是以函

式懸主t乳而余吉橫t要燮數(shù)資料只能作卷操作堂寸象,附腐於呼叫函式的

引數(shù)中(或透謾全域常數(shù)),瓢法電冬屯地使得某一彳固函式只事;1於某

一斜翻亶所有(除非愈如同輪例10-19透謾引敷停遮函式名耦,但造

非常未復濰且不方便)

-但在C++中,造槿情況已有所改建(換句者舌言兌,(^吾言的struc雅吉橫18

輿C++的struct太吉雅tl能力加不相司),C++的struc馀吉糯醴不但能匏!

定羲腐於^余吉橫18的資料成員,也能別定羲腐於^t亶的函式。

事^上,在C++中,struc除吉橫18彳發(fā)來也被傅燮懸class類^別,

雨者都可以定羲^於^女吉橫11或類別的資料成員典函式,差

別只在於造些瓷料成其典函式的于熊殳等稅不同而已。接下來

我儼先直接介貂C++曲^別,加在11.9箭中,釐清C++皓情

II別的差昊。

14

11.3C++的類真別

類直別是物件醇向程式最基本的罩元,是羥生同一類好勿件的基

碘,類^別其^也是一槿使用者自定的資料型熊,在C++中定

羲^別,非常像在傅統(tǒng)€^吾言定羲幺吉情醴的方式,以下是定

羲C++類直別的言吾法:

定羲^月信吾法:

class別名?8

publie:

公用資料輿函式

private:

私用資料輿函式

protected:

保^性資料輿函式

);

15

11.3C++的類賓別

—言吾法Mi明:

?⑴在^別中定羲的資料典函式,分另幅卷成員燮數(shù)(membervariable)輿

成具函式(memberfunction)o

?(2)類^別中可以封成員燮數(shù)及成員函式定羲三槿資料存取等級如下,在本

章中,我彳呼得先^明『公用資料型熊』及『私用資料型熊』,而『保^性

資料型!g』即留待第14章中再做^明。

-public:公用資料型熊

-private:私用資料型熊

-protected:保^性資料型熊

?(3)在^別中宣告成具燮數(shù),不可言殳定初值,例如:『inta=0;』就不合法。

?(4)在類直別中,『不同的存取等級』代表『不同的資料保^方式』,資料

之所以需要保者度,最主要的目的是卷了^各^別的資料?i立且不易

被其他不相干的函式所修改,逵到物件醇向程式^言十中,資料封裝及資料

IS藏的功能。

16

11.3C++的類賓別

?(5)根摞上述定羲類直別的言吾法,我相號可以利用下圈來示意類直別的內(nèi)

17

11.3C++的類賓別

?6()私用型熊資料只能被同一偃|類直

別的成具函式存取;而公用型熊

的資料刖除了類直別內(nèi)的成員可以

存取之外,其他外部的建矍攵、函

式也都可以存取宣告卷公用型熊

的資料。

?7()在^別定羲中,若未特月*主明,

即成具燮數(shù)典成具函式揩被視卷

classstudent

私用型熊。(

?8()資料存取修^字(public、private:

private>protected)it不限定只floatscore;

能^定一次,可重^多次^定。charaddress[40];

intphone;

【翱列1】定羲T固studen糜別,Wpublic:

其成幺泉地址、霜三舌宣告卷『私用瓷intid;

料型熊』;擘虢、姓名、科系宣告卷charname[10];

『公用瓷料型熊』。charmajor[20];

);

classstudent

(

floatscore;//未特另帽主明等級,^i殳焉私用資料型熊

charaddress[40];//未特另嗝主明等級,^i殳焉私用資料型熊

intphone;//未特另匾主明等級,^i殳焉私用資料型熊

或public:

intid;

charname[10];

charmajor[20];

);

classstudent

(

private:

floatscore;

charaddress[40];

public:

intid;

private://可重殳定privat

intphone;

public://可重^言殳定pub1i

charname[10];

charmajor[20];

);

19

11.3C++的類賓別

-【靶例2】延^靶例1,在students別中,宣告雨彳固『公用資料型

熊』的(成具)函式,分別偏Showld()和ShowMajor(),函式用

途分別卷示擘號虎』及示科系』。

classstudent

{

private:

floatscore;

charaddress[40];

intphone;

public:

intid;

charname[10];

charmajor[20];

intShowld();//^示她回僖擘虢,回傅型熊焉int

voidShowMajor();//^示科系,回僖型魅篇VOid

);

20

11.3C++的類賓別

-輪例^明:

?上述輪例,常物件被^除建立之彳爰,id,name,major都可以被外部

函式所取用,Showld()典ShowMajor()也可以被外部程式所軌行,

但score、address典phone只能被同一類期ij的成員函式存取(例如

Showld成員函式)。

21

11.4C++的物件

?^別是^多資料燮數(shù)及函式合成的資料型熊,和余吉情醴很相似(不謾(^吾

言的余吉情S8瓢法在其中定羲函式)。常我件?想要使用類真別畤,必須透謾宣

告建^亶才能別使用,而由^別宣告的建數(shù)^醴,耦之懸物件或物件建

-優(yōu)由下而上的角度來看,類真別是^多同^物件的集合,所需同類真物件,代表

挑有相同資料燮數(shù)及成員函式的物件,例如:每一臺『來行器』^別下的物

件,都包含「速度」、「爬升力」、「重量」、「戴重量」等成員燮數(shù),也

包含「起來」、「降落」、「逃生」等成員函式,以便完成工作。

-由於我憑可以招適些燮數(shù)器殳定卷不同的性值,因此可以在言亥^別下造就了

各式各檬的物件,如同「民航檄」和「戟「4檄」各是一他物件,而『秀行器』

即是^別。在其他物件醇向程式言殳言十的^言中,有些曾符道些燮數(shù)耦之卷

『腐性』、加|各造些成員函式木苒之卷『方法』,也就是所需一彳固物件的腐性

(代表U物件某方面的特性),及一彳固物件的方法(代表透遇方法辦操作物

件)。

22

11.4C++的物件

成具燮數(shù):成M函式:

速起瓶函式

來行器別)重

降落函式

量逃生函式

成具堤數(shù):成具函式:成具建數(shù):成具函式:成^燮數(shù):成具函式:

速度=100起施函式速度=800起施函式速度=50起^函式

重量=500降落函式重量=300降落函式重量=100降落函式

載重量=2000逃生函式載重量=500逃生函式載重量=1200逃生函式

I圜11-3C++的^別輿物件fl御系圈|。青典莖寸照比敕)

23

1141宣告物件造

?宣告物件又可以耦卷「^別生成物件」。在C++言吾言

中,宣告類直別下的物件言吾法如下:

-類直別宣告物件言吾法

類直別名稀物件名耦;

—言吾法言兌明:

?除了先定羲類直別,我優(yōu)也可以模仿結(jié)橫醴的定羲方式,在定羲^別日寺,同

日寺宣告一倜物件^醴。

-【靶例】:

-宣告一低Istudent^別的物件,物件名耦卷John。

classstudentclassstudent

((

……別定羲……或……別定羲……

);}John;//^別定羲口寺,同日寺生成物件John

studentJohn;//宣告物件John

24

11.4.2存取成員燮數(shù)典軌行成員函式

?富物件^18被羥生以彳爰,我件號就可以合法存取公用型魅資料燮數(shù)以及軌行

公用型熊的成具函式,而且存取方法很麓軍,和余吉橫醴差不

在物件典欲取用資料之^加上『」或『->』符虢即可(.是金西疆琳普

而->是金十封指檄物件),如下^法:

-存取成員資料典軌行成員函式言吾法:

物件.成員資料

物件.成員函式()

指檄物件,成員資料

指檄物件,成員函式()

_晚吾明.

二卷用資料典函式,只能被類直別內(nèi)的成員函式存取。(至於保^資料典函式

即留待畿承一章再作^明)

25

11.4.2存取成員燮數(shù)典軌行成員函式

?【翱列1】

-招John物件的id燮數(shù)言殳定卷8923807,言殳定John物件的name燮數(shù)菊'John”。

?John.id=8923807;

?strcpy(J,"John");

?【蒯列2】

-透ilShowMajor()成員函式IM示John的科系名木田。

?John.ShowMajor();

【蒯列3】

-若靶例1、2的物件卷指襟型熊,即必須透謾r->j符虢來存取資料。

?student*pJohn;/*pJohn卷指才票物件,亦可使用吾言格式宣告物件

,即student*pJohn;*/

?pJohn->id=8923807;

?pJohn->ShowMajor();

26

11.4.2存取成員燮數(shù)典軌行成員函式

?【金昔例】

-私用資料典函式,只能被^別內(nèi)的成具函式存取,所以下列是金昔^的敘述:

?John.score=85.5;"score是私用資料

?strcpy(John.address,“臺北市大安IM");〃address是私用資料

?【II念輪例11-1]:定羲^別、宣告物件加存取物件的公用成具資料。

?輪例11-1:ch11_01.cpp(槽案位於隨善光碟ch11\ch11_01.cpp)。

1K|>K|>

1

2槽名:chll_01.cpp

3功能:定羲仁聿^別典宣告3彳固物件

4r|cJ|Cj|cj|c、|cj|c、|cj|cj|cj|c^|c51c^|c/

5

6#include<iostream>

7#include<stdlib.h>

8#include<string.h>

9usingnamespacestd;

27

10

11classcar

12

13public:

14intwheel;

15intperson;

16charname[20];

17private:

18charengine[20];

19);

20

21intmain(void)

22(

23carbus,truck,taxi;

24

25strcpy(,”公窠,);

26bus.wheel=6;

27bus.person=40;

28

29strcpy(truck.name,”卡窠,);

30truck.wheel=8;

31truck.person=3;

32

33strcpy(taxi.namejtf程事");

34taxi.wheel=4;

35taxi.person=5;

36//strcpy(taxi.engine,"VI6");//不可存取私用型熊的建敷

37

11.4.2存取成員燮數(shù)典軌行成員函式

38cout?bus.name?"有"《bus.wheel<<"彳固里俞子,可戴"《bus.personcc"人\n";

39cout?truck.name?"W?truck.whee1?乜固本命子,可戴"《truck.person?"A\n";

40cout?taxi.namec〈"有"《taxi.wheel<<"(0^f子,可戴"《taxi.person?"人人";

41//system("pause");

42return0;

43)

-那詢果:

公隼有6彳固ft子,可戴40人

卡隼有8彳固翰子,可戴3人

官十程隼有40輸子,可載5人

-輪例^明:

?⑴第11~19行,定羲了car^別,^類直別下宣告了3彳固公用型密燮

敢intwheel、intperson、charname[20],以及一彳固私用型熊燮嗷

charengine[20]o

29

11.4.2存取成員燮數(shù)典軌行成員函式

?(2)第23行,宣告了carH別下的3彳固物件^醴,名耦分別懸

bus,truck,taxio

?(3)第25~27行,器殳定bus物件的公用型熊燮數(shù)。第29~31行,^定

truck物件的公用型魅燮數(shù)。第33~35行,^定匕xi物件的公用型憩

?(4)第36行是不合法的敘述,因卷engine是私用燮數(shù),所以不允^

外部程式存取^^數(shù)(但允言午相同H別下的各級成具函式存取,

辭見下一第)。

30

11.5成員函式

?成具函式其^就是一般物件醇向程式含殳言十中的『方法』,它典成員建數(shù)一

棣,依it宣告的IM段分懸public、private>protected等三不重等級。且只

有public等級的成員函式可以被外部程式呼叫孰行,而private等級的成員

函式只能被其他的成員函式呼叫軌行但不可以被外部程式呼叫孰行,至於

protected等級的成員函式即留待it承一章再作^明。

-到目前卷止,我儼號了解到private等級的成員燮數(shù)或函式輾法被外部程式所取

用典軌行,因此能匏J逵到物件醇向「封裝」的目的。

-而public等級的成具燮數(shù)或函式可以被外部程式所取用典軌行,是物件醇向封

裝日寺堂寸外唯一的管道,同畤private等級的成曼燮數(shù)或函式也可以被public等級

的成具函式所呼叫,因此我憑如果想要取用private等級的成具燮數(shù),可以先

呼叫public等級的成員函式,再由public等級的成具函式修改private等級的成

如此不但逵到封裝的目的,也可以在^別中增加了^言十程式的弓勒性。

31

11.5成員函式

^

外部程式

1111-4外部程式存取private等級的資料必須透謾public等級的成員函式央完成

32

11.5.1定羲成員函式

?在類直別內(nèi)宣告的函式穗之懸成員函式(memberfunction),在前面我件號

已^示輪謾如何『宣告』成員函式,但我件號加未介貂如何「定羲」成具函

式,事^上,定羲成員函式和定羲普通函式非常相似,我相號可以在類直別之

外(典宣告分I1來)定羲函式;也可以在類直別內(nèi)招成員函式輿定羲合彳并嘉

在一起,以下是定羲成員函式的言吾法:

-在類朝炳*成里合吾法,定斐典豈告合彳并)______________________

成員函式回停值型熊成員函式名耦(資料型熊引數(shù)1,資料型熊引數(shù)2,……)

..成同函式定羲..

—在類里」外*成三函式^法(定羲典量分

成景函式回停值型^^別名耦::成員函式名耦(資料型熊引數(shù)1,資料型熊引數(shù)2,……)

…..成員函式定羲…..

33

11.5.1定羲成員函式

—言吾法^明:

?若我相號符定羲典宣告成具函式分刖必須在定羲成員函式畤,

透謾輪圉58算子『::』指定^成員函式所;1類直別。言青兄下面雨彳固輪

例。

?【靶例】

-言青宣告加定羲myclass^別中的雨彳固公用型熊的成員函式funcA典

funcB,其中funcA瓢回傅值,也不接受任何引數(shù);funcB邱J接受雨彳固

整數(shù)引數(shù),加回停一彳固整數(shù)回傅值。

34

11.5.1定羲成員函式

?定羲典宣告分

classmyclass

(

public:

voidfunA();//成員函式宣告

intfuncB(int,int);//成員函式宣告

private:

//私用資料輿函式

protected:

//保^性資料輿函式

);

voidmyclass::funcA()//成員函式定羲

(

.....成員函式定羲.....

)

intmyclass::funB(intm,intn)//成員函式定羲

(

......成具函式定羲......

}

35

11.5.1定羲成員函式

-或

?定蕈輿宣告合彳并在類覦內(nèi)

classmyclass

{

public:

voidfunA()

(

.....成員函式定羲??

)

intfuncB(intm,intn)

(

..成員函式定羲??

}

private:

//私用資料典函式

protected:

//保^性資料輿函式

);

36

11.5.2透謾成員函式存取

私用性資料燮數(shù)

?私用性(private)資料建數(shù)輾法被外部程式來存取,但可以透謾同一類直別

的成員函式(等級瓢限制)來存取它,以便彈性愿用私用資料燮數(shù)。

?【覲念輪例11-2】:透謾公用成具函式存取私用資料輿成員函式。

?輪例11-2:ch11_02.cpp(槽案位於隨善光碟ch11\ch11_02.cpp)。

1I*|c*|c*|c*|c^|c*|c*|cJ|Cr|c^|c*|c*|c*|c*|cJ|Cr|c^|c

2槽名:chll_02.cpp

3功能:透謾公用成員函式存取私用資料輿成員函式

4*|c^|c^|c^|c^|c^|c^|cr|c^|c^|c51c^|c^|cr|cr|c^|c^|c^|c^|c^|c

5

6#include<iostream>

7#include<stdlib.h>

8usingnamespacestd;

9

10

37

10classmyclass

11

12public:

13voidInitVar();

14voidAddVar(intb);

15voidShowVar();

16private:

17intVar;

18voidRealShow();

19);

20

21voidmyclass::InitVar()

22(

23Var=0;

24)

25

26voidmyclass::AddVar(intb)

27(

28Vai-Var+b;

29)

30

31voidmyclass::ShowVar()

32{

33RealShow();//軌行private的函式

34)

35

36voidmyclass::RealShow()

37(

38cout?"Var="?Var?endl;

39)

11.5.2透謾成具函式存取

私用性資料燮數(shù)

40

41intmain(void)

42(

43myclassX,Y;

44

45X.InitVar();//在X物件上,軌行IniWar成員函式

46Y.InitVar();//在Y物件上,軌行IniWar成員函式

47

48X.AddVar(10);//在X物件上,軌行AddVar成員函式

49cout?"物件X\t";

50X.ShowVar();

51

52cout?"物件Y\t";

53Y.AddVar(5);//在Y物件上,物l行AddVar成員函式

54Y.ShowVar();

55

56cout?"物件Y\t";

57Y.AddVar(3);//在Y物件上,軌行AddVar成員函式

58Y.ShowVar();

59//system("pause");

60return0;

61

39

11.5.2透謾成員函式存取

私用性資料燮數(shù)

物件X

-孰行結(jié)果:Vai-10

物件Y

物件YVai-5

Vai-8

-輪例^明:

?(1)第1375行,宣告了3彳固公用的成具函式,可以被外部程式軌行。

第1778行,宣告了1彳固私用的建數(shù)典成員函式,不可以被外部程

式存取典軌行。

?(2)第21~39行,分別是四彳固成具函式的定羲(其^我伸也可以符

宣告典定羲合彳并在^別內(nèi))。

?(3)燮數(shù)Var輿成員函式RealShow雖隹然不能別被外部程式存取典孰

行,但可以被同一^別的成員函式存取輿軌行,例如第23、28、

33行。

?(4)程式孰行日札者書意18內(nèi)部呈現(xiàn)下列建化。

40

11.5.2透謾成具函式存取

私用性資料燮數(shù)

-Stepl:第43行軌行完myclassX,Y;

言州意醴中符同畤存物件x

在雨彳固物件以及它的成

員資料。

物件Y

X.lnitVarQ;

Y.InitVarQ;

-Step2:第45~46行軌

0物件x

行完招雨他物件的

資料建數(shù)Va喑荒殳卷0。

0物件Y

41

11.5.2透謾成具函式存取

私用性資料燮數(shù)

X.AddVar(lO);—

-Step3:第48行期1行完

暈,物件X的資料燮數(shù)Var10物件x

Var被^^10。

Var0物件Y

Y.AddVar(5);

-Step4:第53行期1行完

Var10物件x

物件Y的資料燮數(shù)

Var被言殳卷5。

Var5物件Y

42

11.5.2透謾成員函式存取

私用性資料燮數(shù)

-Step5:第57行軌行完暈,物件Y的資料燮數(shù)Var被^^8。

Y.AddVar(3);

43

11.5.2透謾成具函式存取

私用性資料建數(shù)

10classmyclass

?【覲念輪例]:改嘉靶例

11-311-2,11{

揩宣告典定羲成具函式合彳并在^別12public:

內(nèi)。13voidInitVar()

?竄創(chuàng)列11-3:ch11_03.cpp(槽案位14(

於隨耆光碟ch1「ch11_03.cpp)o15Var=0;

16)

17voidAddVar(intb)

11*|c^|c^|cr|c^|cr|c^|c*|c^|c18(

2槽名:chll_03.cpp19Vai-Var+b;

3功能:合彳并定羲輿宣告成景函式20)

4^

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論