版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第第8章章 類和對(duì)象的特性類和對(duì)象的特性8.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述8.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義8.3 類的成員函數(shù)類的成員函數(shù)8.4 對(duì)象成員的引用對(duì)象成員的引用8.5 類的封裝性和信息隱蔽類的封裝性和信息隱蔽8.6 類和對(duì)象的簡單應(yīng)用舉例類和對(duì)象的簡單應(yīng)用舉例28.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 到目前為止,介紹的都是到目前為止,介紹的都是C+在面向過程的程序在面向過程的程序設(shè)計(jì)中的應(yīng)用。設(shè)計(jì)中的應(yīng)用。 對(duì)于規(guī)模比較小的程序,編程者可以直接編寫出對(duì)于規(guī)模比較小的程序,編程者可以直接編寫出一個(gè)面向過程的程序,詳細(xì)地描述每
2、一瞬時(shí)的數(shù)據(jù)結(jié)一個(gè)面向過程的程序,詳細(xì)地描述每一瞬時(shí)的數(shù)據(jù)結(jié)構(gòu)及對(duì)其的操作過程。構(gòu)及對(duì)其的操作過程。 但是當(dāng)程序規(guī)模較大時(shí),就顯得力不從心了。但是當(dāng)程序規(guī)模較大時(shí),就顯得力不從心了。C+就是就是為了解決編寫大程序過程中的困難而產(chǎn)生的為了解決編寫大程序過程中的困難而產(chǎn)生的。38.1.1 什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)什么是面向?qū)ο蟮某绦蛟O(shè)計(jì) 面向?qū)ο蟮某绦蛟O(shè)計(jì)的思路和人們?nèi)粘I钪刑幟嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)的思路和人們?nèi)粘I钪刑幚韱栴}的思路是相似的。在自然世界和社會(huì)生活中,理問題的思路是相似的。在自然世界和社會(huì)生活中,一個(gè)復(fù)雜的事物總是由許多部分組成的。一個(gè)復(fù)雜的事物總是由許多部分組成的。 當(dāng)人們生產(chǎn)汽車
3、時(shí),分別設(shè)計(jì)和制造發(fā)動(dòng)機(jī)、底當(dāng)人們生產(chǎn)汽車時(shí),分別設(shè)計(jì)和制造發(fā)動(dòng)機(jī)、底盤、車身和輪子,最后把它們組裝在一起。在組裝時(shí),盤、車身和輪子,最后把它們組裝在一起。在組裝時(shí),各部分之間有一定的聯(lián)系,以便協(xié)調(diào)工作。這就是面各部分之間有一定的聯(lián)系,以便協(xié)調(diào)工作。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思路。向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思路。41. 對(duì)象對(duì)象 客觀世界中任何一個(gè)事物都可以看成一個(gè)對(duì)象客觀世界中任何一個(gè)事物都可以看成一個(gè)對(duì)象(object)。對(duì)象可大可小。對(duì)象是構(gòu)成系統(tǒng)的基本單位。對(duì)象可大可小。對(duì)象是構(gòu)成系統(tǒng)的基本單位。 任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,即任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,即屬性屬性(att
4、ribute)和行為和行為(behavior),它能根據(jù)外界給的信息,它能根據(jù)外界給的信息進(jìn)行相應(yīng)的操作。一個(gè)對(duì)象往往是由一組屬性和一組行為進(jìn)行相應(yīng)的操作。一個(gè)對(duì)象往往是由一組屬性和一組行為構(gòu)成的。一般來說,凡是具備屬性和行為這兩種要素的,構(gòu)成的。一般來說,凡是具備屬性和行為這兩種要素的,都可以作為對(duì)象。都可以作為對(duì)象。5 在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間通過一定的渠道相互在一個(gè)系統(tǒng)中的多個(gè)對(duì)象之間通過一定的渠道相互聯(lián)系,如圖示意。要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為聯(lián)系,如圖示意。要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為(即即操作操作),應(yīng)當(dāng)向它傳送相應(yīng)的消息。對(duì)象之間就是這樣通,應(yīng)當(dāng)向它傳送相應(yīng)的消息。對(duì)象之間就是
5、這樣通過發(fā)送和接收消息互相聯(lián)系的。過發(fā)送和接收消息互相聯(lián)系的。6 面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的的這種思路這種思路。 使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件系統(tǒng)時(shí),首要的問題是確定該系統(tǒng)是由哪些對(duì)象組成的,系統(tǒng)時(shí),首要的問題是確定該系統(tǒng)是由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。并且設(shè)計(jì)這些對(duì)象。 在在C+中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼即操作代碼)這兩部分組成的這兩部分組成的。7如一個(gè)三角形對(duì)象,它的如一個(gè)三角形對(duì)象,它的3個(gè)邊長就是它的屬性個(gè)邊長就是它的屬性。函數(shù)
6、是用來對(duì)數(shù)據(jù)進(jìn)行操作的,以便實(shí)現(xiàn)某些功能,函數(shù)是用來對(duì)數(shù)據(jù)進(jìn)行操作的,以便實(shí)現(xiàn)某些功能,例如例如:可以通過邊長可以通過邊長計(jì)算計(jì)算出三角形的出三角形的面積面積 輸出輸出三角形的三角形的邊長和面積邊長和面積。計(jì)算三角形面積和輸出有關(guān)數(shù)據(jù)就是前面提到的行計(jì)算三角形面積和輸出有關(guān)數(shù)據(jù)就是前面提到的行為,在程序設(shè)計(jì)方法中也稱為方法為,在程序設(shè)計(jì)方法中也稱為方法(method)。調(diào)用對(duì)象中的函數(shù)就是向該對(duì)象傳送一個(gè)調(diào)用對(duì)象中的函數(shù)就是向該對(duì)象傳送一個(gè)消息消息(message),要求該對(duì)象實(shí)現(xiàn)某一行為,要求該對(duì)象實(shí)現(xiàn)某一行為(功能功能)。82. 封裝與信息隱蔽封裝與信息隱蔽 可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把
7、它的一部分屬性可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把它的一部分屬性和功能對(duì)外界屏蔽,也就是說從外界是看不到的和功能對(duì)外界屏蔽,也就是說從外界是看不到的,甚至是甚至是不可知的。好處是大大降低了操作對(duì)象的復(fù)雜程度。不可知的。好處是大大降低了操作對(duì)象的復(fù)雜程度。面向?qū)ο蟪绦蛟O(shè)計(jì)方法的一個(gè)重要特點(diǎn)就是面向?qū)ο蟪绦蛟O(shè)計(jì)方法的一個(gè)重要特點(diǎn)就是“封裝性封裝性”。所謂所謂“封裝封裝”,指兩方面的含義:,指兩方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干成一個(gè)基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。擾。二是將對(duì)象中某
8、些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),二是將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對(duì)外界隱蔽的做法稱為信息隱蔽。息。這種對(duì)外界隱蔽的做法稱為信息隱蔽。910信息隱蔽還有利于數(shù)據(jù)安全,防止無關(guān)的人了解和修信息隱蔽還有利于數(shù)據(jù)安全,防止無關(guān)的人了解和修改數(shù)據(jù)。改數(shù)據(jù)。C+的對(duì)象中的函數(shù)名就是對(duì)象的對(duì)外接口,外界可的對(duì)象中的函數(shù)名就是對(duì)象的對(duì)外接口,外界可以通過函數(shù)名來調(diào)用這些函數(shù)來實(shí)現(xiàn)某些行為以通過函數(shù)名來調(diào)用這些函數(shù)來實(shí)現(xiàn)某些行為(功能功能)。113.抽象抽象 抽象抽象的過程是將有關(guān)事物的共性歸納、集
9、中的過程的過程是將有關(guān)事物的共性歸納、集中的過程。抽象抽象的作用是表示同一類事物的本質(zhì)。的作用是表示同一類事物的本質(zhì)。 C和和C+中的數(shù)據(jù)類型就是對(duì)一批具體的數(shù)的抽象。中的數(shù)據(jù)類型就是對(duì)一批具體的數(shù)的抽象。 對(duì)象對(duì)象是具體存在的,如一個(gè)三角形可以作為一個(gè)對(duì)象,是具體存在的,如一個(gè)三角形可以作為一個(gè)對(duì)象,10個(gè)不同尺寸的三角形是個(gè)不同尺寸的三角形是10個(gè)對(duì)象。如果這個(gè)對(duì)象。如果這10個(gè)三角形對(duì)個(gè)三角形對(duì)象有相同的屬性和行為,可以將它們抽象為一種類型,稱象有相同的屬性和行為,可以將它們抽象為一種類型,稱為為三角形類型三角形類型。12 在在C+中,這種類型就稱為中,這種類型就稱為“類類(class
10、)”。 這這10個(gè)三角形就是屬于同一個(gè)三角形就是屬于同一“類類”的的對(duì)象對(duì)象。類是。類是對(duì)象的抽象,而對(duì)象則是類的特例,或者說是類對(duì)象的抽象,而對(duì)象則是類的特例,或者說是類的具體表現(xiàn)形式。的具體表現(xiàn)形式。134. 繼承與重用繼承與重用 如果在軟件開發(fā)中已經(jīng)建立了一個(gè)名為如果在軟件開發(fā)中已經(jīng)建立了一個(gè)名為A的的“類類”,又想,又想另外建立一個(gè)名為另外建立一個(gè)名為B的的“類類”,而后者與前者內(nèi)容基本相,而后者與前者內(nèi)容基本相同,只是在前者的基礎(chǔ)上增加一些屬性和行為,只需在類同,只是在前者的基礎(chǔ)上增加一些屬性和行為,只需在類A的基礎(chǔ)上增加一些新內(nèi)容即可。這就是面向?qū)ο蟪绦蛟O(shè)的基礎(chǔ)上增加一些新內(nèi)容即可
11、。這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承機(jī)制。計(jì)中的繼承機(jī)制。14利用繼承可以簡化程序設(shè)計(jì)的步驟。利用繼承可以簡化程序設(shè)計(jì)的步驟。“白馬白馬”繼承了繼承了“馬馬”的基本特征,又增加了新的特征的基本特征,又增加了新的特征(顏色顏色),“馬馬”是父類,或稱為基類,是父類,或稱為基類,“白馬白馬”是是從從“馬馬”派生派生出來的,稱為子類或派生類。出來的,稱為子類或派生類。C+提供了繼承機(jī)制,采用繼承的方法可以很方便地利提供了繼承機(jī)制,采用繼承的方法可以很方便地利用一個(gè)已有的類建立一個(gè)新的類。這就是常說的用一個(gè)已有的類建立一個(gè)新的類。這就是常說的“軟件軟件重用重用” 的思想。的思想。15 5.多態(tài)性多態(tài)性 如
12、果有幾個(gè)相似而不完全相同的對(duì)象,有時(shí)人們?nèi)绻袔讉€(gè)相似而不完全相同的對(duì)象,有時(shí)人們要求在向它們發(fā)出同一個(gè)消息時(shí),它們的反應(yīng)各不相要求在向它們發(fā)出同一個(gè)消息時(shí),它們的反應(yīng)各不相同,分別執(zhí)行不同的操作。這種情況就是多態(tài)現(xiàn)象。同,分別執(zhí)行不同的操作。這種情況就是多態(tài)現(xiàn)象。 如,在如,在Windows環(huán)境下,用鼠標(biāo)雙擊一個(gè)文件環(huán)境下,用鼠標(biāo)雙擊一個(gè)文件對(duì)象對(duì)象(這就是向?qū)ο髠魉鸵粋€(gè)消息這就是向?qū)ο髠魉鸵粋€(gè)消息),如果對(duì)象是一個(gè),如果對(duì)象是一個(gè)可執(zhí)行文件,則會(huì)執(zhí)行此程序,如果對(duì)象是一個(gè)文本可執(zhí)行文件,則會(huì)執(zhí)行此程序,如果對(duì)象是一個(gè)文本文件,則啟動(dòng)文本編輯器并打開該文件。文件,則啟動(dòng)文本編輯器并打開該文件
13、。16 在在C+中,所謂中,所謂多態(tài)性多態(tài)性是指:由繼承而產(chǎn)生是指:由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。同的響應(yīng)。 多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征,多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征,能增加程序的靈活性能增加程序的靈活性。178.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn) 傳統(tǒng)的面向過程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用傳統(tǒng)的面向過程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。 所有的數(shù)據(jù)都是公用的,一個(gè)函數(shù)可以使用任何所有的數(shù)據(jù)都是公用的,一個(gè)函數(shù)可以使用任何一組數(shù)據(jù),而一組數(shù)據(jù)
14、又能被多個(gè)函數(shù)所使用。一組數(shù)據(jù),而一組數(shù)據(jù)又能被多個(gè)函數(shù)所使用。1819 面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面對(duì) 的是一個(gè)個(gè)對(duì)象。實(shí)際上,每一組數(shù)據(jù)都是有特定的用途的是一個(gè)個(gè)對(duì)象。實(shí)際上,每一組數(shù)據(jù)都是有特定的用途的,是某種操作的對(duì)象。也就是說,一組操作調(diào)用一組數(shù)的,是某種操作的對(duì)象。也就是說,一組操作調(diào)用一組數(shù)據(jù)。據(jù)。 程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面: 一是設(shè)計(jì)所需的各種一是設(shè)計(jì)所需的各種類和對(duì)象類和對(duì)象,即決定把哪些數(shù)據(jù)和操作,即決定把哪些數(shù)據(jù)和操作封裝在一起;封裝在一起; 二是考慮怎樣向有關(guān)對(duì)象發(fā)送二是考慮怎樣
15、向有關(guān)對(duì)象發(fā)送消息消息,以完成所需的任務(wù)。,以完成所需的任務(wù)。20 這時(shí)主函數(shù)如同一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象這時(shí)主函數(shù)如同一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象 發(fā)出命令,讓這些對(duì)象活動(dòng)起來發(fā)出命令,讓這些對(duì)象活動(dòng)起來(或者說激活這些對(duì)象或者說激活這些對(duì)象),完成自己職責(zé)范圍內(nèi)的工作。各個(gè)對(duì)象的操作完成了,完成自己職責(zé)范圍內(nèi)的工作。各個(gè)對(duì)象的操作完成了, 整體任務(wù)也就完成了。整體任務(wù)也就完成了。 對(duì)一個(gè)大型任務(wù)來說,面向?qū)ο蟪绦蛟O(shè)計(jì)方法是十對(duì)一個(gè)大型任務(wù)來說,面向?qū)ο蟪绦蛟O(shè)計(jì)方法是十分有效的,它能大大降低程序設(shè)計(jì)人員的工作難度,減分有效的,它能大大降低程序設(shè)計(jì)人員的工作難度,減少出錯(cuò)機(jī)會(huì)。少出錯(cuò)機(jī)會(huì)。
16、218.1.3 類和對(duì)象的作用類和對(duì)象的作用 類類是是C+中十分重要的概念,它是實(shí)現(xiàn)面向?qū)ο蟪绦蛑惺种匾母拍?,它是?shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。類是所有面向?qū)ο蟮恼Z言的共同特征,所有設(shè)計(jì)的基礎(chǔ)。類是所有面向?qū)ο蟮恼Z言的共同特征,所有面向?qū)ο蟮恼Z言都提供了這種類型。面向?qū)ο蟮恼Z言都提供了這種類型。 基于基于對(duì)象就是基于類對(duì)象就是基于類。 程序程序的操作是圍繞對(duì)象進(jìn)行的。的操作是圍繞對(duì)象進(jìn)行的。22一組數(shù)據(jù)是和一組操作相對(duì)應(yīng)的。因此把相關(guān)的數(shù)據(jù)和一組數(shù)據(jù)是和一組操作相對(duì)應(yīng)的。因此把相關(guān)的數(shù)據(jù)和操作放在一起,行成一個(gè)整體,與外界相對(duì)分隔,這就操作放在一起,行成一個(gè)整體,與外界相對(duì)分隔,這就是面向?qū)?/p>
17、象程序設(shè)計(jì)中的對(duì)象。是面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象。程序設(shè)計(jì)的關(guān)鍵程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象,及確定向這些對(duì)是設(shè)計(jì)好每一個(gè)對(duì)象,及確定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相應(yīng)操作象發(fā)出的命令,使各對(duì)象完成相應(yīng)操作。238.1.4 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖_發(fā)不做要求不做要求24 8.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義8.2.1 類和對(duì)象的關(guān)系類和對(duì)象的關(guān)系 每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有相同每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有相同的結(jié)構(gòu)和特性的。每個(gè)對(duì)象都屬于一個(gè)特定的類型。的結(jié)構(gòu)和特性的。每個(gè)對(duì)象都屬于一個(gè)特定的類型。 類類代表了某一批對(duì)象的代表了某一批對(duì)象的共性和特
18、征共性和特征。25類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。在在C+中也是先聲明一個(gè)類類型,然后用它去定義若中也是先聲明一個(gè)類類型,然后用它去定義若干個(gè)同類型的對(duì)象。干個(gè)同類型的對(duì)象。對(duì)象就是類類型的一個(gè)變量。可以說類是對(duì)象的模板,對(duì)象就是類類型的一個(gè)變量。可以說類是對(duì)象的模板,是用來定義對(duì)象的一種抽象類型。是用來定義對(duì)象的一種抽象類型。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間??臻g。在一開始時(shí)弄清對(duì)象和類在一開始時(shí)弄清對(duì)象和類的關(guān)系是十分重要的。的關(guān)系是十分重要的。268.2.2 聲明類類型聲明類類
19、型類是用戶自己指定的類型。類是用戶自己指定的類型。如果程序中要用到類類型,必須自己根據(jù)需要進(jìn)行聲如果程序中要用到類類型,必須自己根據(jù)需要進(jìn)行聲明,或者使用別人已設(shè)計(jì)好的類。明,或者使用別人已設(shè)計(jì)好的類。C+標(biāo)準(zhǔn)本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容。標(biāo)準(zhǔn)本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容。27聲明一個(gè)類:聲明一個(gè)類: class Student /以以class開頭開頭 int num; char name20; char sex; /以上以上3行是數(shù)據(jù)成員行是數(shù)據(jù)成員 void display( ) /這是成員函數(shù)這是成員函數(shù) coutnum:numendl; coutname:name
20、endl; cout“sex:”sexendl; ; Student stud1,stud2; /定義了兩個(gè)定義了兩個(gè)Student 類的對(duì)象類的對(duì)象stud1和和stud228可以看到可以看到:類類(class )就是對(duì)象的類型。就是對(duì)象的類型。實(shí)際上,類是一種廣義的數(shù)據(jù)類型。實(shí)際上,類是一種廣義的數(shù)據(jù)類型。類這種數(shù)據(jù)類型中的數(shù)據(jù)既包含數(shù)據(jù),也包含操作數(shù)據(jù)的類這種數(shù)據(jù)類型中的數(shù)據(jù)既包含數(shù)據(jù),也包含操作數(shù)據(jù)的函數(shù)。函數(shù)。不能把類中的全部成員與外界隔離,一般是把數(shù)據(jù)隱蔽起不能把類中的全部成員與外界隔離,一般是把數(shù)據(jù)隱蔽起來,而把成員函數(shù)作為對(duì)外界的接口來,而把成員函數(shù)作為對(duì)外界的接口。29可以將
21、上面類的聲明改為可以將上面類的聲明改為class Student /聲明類類型聲明類類型 private : /聲明以下部分為私有的聲明以下部分為私有的 int num; char name20; char sex; public : /聲明以下部分為公用的聲明以下部分為公用的 void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; ;Student stud1,stud2;/定義了兩個(gè)定義了兩個(gè)Student類的對(duì)象類的對(duì)象30如果在類的定義中既不指定如果在類的定義中既不指定private,也不,也不指定指定p
22、ublic,則系統(tǒng)就默認(rèn)為是私有的。則系統(tǒng)就默認(rèn)為是私有的。歸納以上對(duì)類類型的聲明,可得到其一般形式如下:歸納以上對(duì)類類型的聲明,可得到其一般形式如下:class 類名類名 private : 私有的數(shù)據(jù)和成員函數(shù)私有的數(shù)據(jù)和成員函數(shù); public : 公用的數(shù)據(jù)和成員函數(shù)公用的數(shù)據(jù)和成員函數(shù);成員訪問限定符成員訪問限定符31 還有還有一種成員訪問限定符一種成員訪問限定符protected(受保護(hù)的受保護(hù)的),用用protected聲明的成員稱為受保護(hù)的成員,它不能聲明的成員稱為受保護(hù)的成員,它不能被類外訪問被類外訪問(這點(diǎn)與私有成員類似這點(diǎn)與私有成員類似),但可以被派生類的,但可以被派生類
23、的成員成員函數(shù)函數(shù)訪問。訪問。 在在聲明類類型時(shí),聲明為聲明類類型時(shí),聲明為private的成員和聲明的成員和聲明為為public的成員的成員的次序任意,既可以先出現(xiàn)的次序任意,既可以先出現(xiàn)private部分,部分,也也可以先出現(xiàn)可以先出現(xiàn)public部分。部分。 如果如果在類體中既不寫關(guān)鍵字在類體中既不寫關(guān)鍵字private,又不寫,又不寫public,就就默認(rèn)為默認(rèn)為private。32在一個(gè)類體中,關(guān)鍵字在一個(gè)類體中,關(guān)鍵字private和和public可以分別可以分別出現(xiàn)多次。每個(gè)部分的有效范圍到出現(xiàn)另一個(gè)訪問出現(xiàn)多次。每個(gè)部分的有效范圍到出現(xiàn)另一個(gè)訪問限定符或類體結(jié)束時(shí)限定符或類體結(jié)
24、束時(shí)(最后一個(gè)右花括號(hào)最后一個(gè)右花括號(hào))為止。為止。但是為了使程序清晰,應(yīng)該但是為了使程序清晰,應(yīng)該養(yǎng)成這樣的習(xí)慣養(yǎng)成這樣的習(xí)慣: 使每一種成員訪問限定符在類定義體中只出現(xiàn)一次。使每一種成員訪問限定符在類定義體中只出現(xiàn)一次。在以前的在以前的C+程序中,常先出現(xiàn)程序中,常先出現(xiàn)private部分,后部分,后出現(xiàn)出現(xiàn)public部分部分?,F(xiàn)在?,F(xiàn)在的的C+ 程序多數(shù)先寫程序多數(shù)先寫public部分,部分,把把private部分放在類體的后部。部分放在類體的后部。這樣可以使用戶將注意力集中在能被外界調(diào)用的成員上這樣可以使用戶將注意力集中在能被外界調(diào)用的成員上,使使閱讀者的思路更清晰一些。閱讀者的思路
25、更清晰一些。338.2.3 定義對(duì)象的方法定義對(duì)象的方法用已聲明的用已聲明的Student類來定義對(duì)象,這種方法是很容類來定義對(duì)象,這種方法是很容易理解的。經(jīng)過定義后,易理解的。經(jīng)過定義后,stud1和和stud2就成為具有就成為具有Student類特征的對(duì)象。類特征的對(duì)象。stud1和和stud2這兩個(gè)對(duì)象都分別包括這兩個(gè)對(duì)象都分別包括Student類中定義的類中定義的數(shù)據(jù)和函數(shù)。數(shù)據(jù)和函數(shù)。定義對(duì)象的方法如下:定義對(duì)象的方法如下:1.先聲明類類型,然后再定義對(duì)象。先聲明類類型,然后再定義對(duì)象。如:如: Student stud1,stud2; /Student是已經(jīng)聲明的類類型是已經(jīng)聲明的
26、類類型34在在C+中,聲明了類類型后,定義對(duì)象有兩種形式:中,聲明了類類型后,定義對(duì)象有兩種形式:(1)class 類名類名 對(duì)象名對(duì)象名如如: class Student stud1,stud2;把把class和和Student合起來作為一個(gè)類名,用來定義對(duì)象。合起來作為一個(gè)類名,用來定義對(duì)象。(2)類名)類名 對(duì)象名對(duì)象名如如 : Student stud1,stud2;直接用類名定義對(duì)象。直接用類名定義對(duì)象。這兩種方法是等效的。這兩種方法是等效的。從從C語言繼承下來的語言繼承下來的是是C+的特色,更為簡捷方便的特色,更為簡捷方便352.在聲明類類型的同時(shí)定義對(duì)象在聲明類類型的同時(shí)定義對(duì)象
27、class Student /聲明類類型聲明類類型 public : /先聲明公用部分先聲明公用部分 void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; private : /后聲明私有部分后聲明私有部分 int num; char name20; char sex;stud1,stud2;/定義了兩個(gè)定義了兩個(gè)Student類的對(duì)象類的對(duì)象363.不出現(xiàn)類名,直接定義對(duì)象不出現(xiàn)類名,直接定義對(duì)象class /無類名無類名 private : public : stud1,stud2;/定義了兩個(gè)無類名的類對(duì)
28、象定義了兩個(gè)無類名的類對(duì)象這種方法在這種方法在C+中是合法的、允許的,中是合法的、允許的,很少用很少用,也不提倡用。,也不提倡用。37l在實(shí)際的程序開發(fā)中,一般都采用上面在實(shí)際的程序開發(fā)中,一般都采用上面3種方法中的種方法中的 第第1種方法。種方法。l在小型程序中或所聲明的類只用于本程序時(shí),也可以在小型程序中或所聲明的類只用于本程序時(shí),也可以用第用第2種方法。在定義一個(gè)對(duì)象時(shí),編譯系統(tǒng)會(huì)為這個(gè)種方法。在定義一個(gè)對(duì)象時(shí),編譯系統(tǒng)會(huì)為這個(gè)對(duì)象分配存儲(chǔ)空間,以存放對(duì)象中的成員對(duì)象分配存儲(chǔ)空間,以存放對(duì)象中的成員。388.3 類的成員函數(shù)類的成員函數(shù)8.3.1 成員函數(shù)的性質(zhì)成員函數(shù)的性質(zhì)類的成員函數(shù)
29、類的成員函數(shù)(簡稱類函數(shù)簡稱類函數(shù))是函數(shù)的一種,它的用是函數(shù)的一種,它的用法和作用和第法和作用和第4章介紹過的函數(shù)基本上是一樣的,它也有章介紹過的函數(shù)基本上是一樣的,它也有返回值和函數(shù)類型。返回值和函數(shù)類型。它它與一般函數(shù)的區(qū)別與一般函數(shù)的區(qū)別是:是: 它是屬于一個(gè)類的成員,出現(xiàn)在類體中。它是屬于一個(gè)類的成員,出現(xiàn)在類體中。它可以被指定它可以被指定為:為:private(私有的私有的)、public (公用的公用的)或或protected(受保護(hù)的受保護(hù)的)。在使用類函數(shù)時(shí),要注意調(diào)用它的在使用類函數(shù)時(shí),要注意調(diào)用它的權(quán)限權(quán)限(它能否被調(diào)用它能否被調(diào)用)以以及它的作用域及它的作用域(函數(shù)能使
30、用什么范圍中的數(shù)據(jù)和函數(shù)函數(shù)能使用什么范圍中的數(shù)據(jù)和函數(shù))。39例如私有的成員函數(shù)只能被本類中的其它成員函數(shù)例如私有的成員函數(shù)只能被本類中的其它成員函數(shù)所調(diào)用,而不能被類外調(diào)用。所調(diào)用,而不能被類外調(diào)用。成員函數(shù)可以訪問本類中任何成員成員函數(shù)可以訪問本類中任何成員(包括私有的和公用包括私有的和公用的的),可以引用在本作用域中有效的數(shù)據(jù)。,可以引用在本作用域中有效的數(shù)據(jù)。一般的做法是將需要被外界調(diào)用的成員函數(shù)指定為一般的做法是將需要被外界調(diào)用的成員函數(shù)指定為public,它們是類的對(duì)外接口。,它們是類的對(duì)外接口。40注意:注意:并非要求把所有成員函數(shù)都指定為并非要求把所有成員函數(shù)都指定為publ
31、ic。有的函數(shù)并不是準(zhǔn)備為外界調(diào)用的,而是為本有的函數(shù)并不是準(zhǔn)備為外界調(diào)用的,而是為本類類中中的成員函數(shù)所調(diào)用的,就應(yīng)該將它們指定為的成員函數(shù)所調(diào)用的,就應(yīng)該將它們指定為private。這種這種函數(shù)的作用是支持其它函數(shù)的操作,是類中函數(shù)的作用是支持其它函數(shù)的操作,是類中其它其它成員成員的工具函數(shù),類外用戶不能調(diào)用這些私有的的工具函數(shù),類外用戶不能調(diào)用這些私有的工具工具函數(shù)函數(shù)。 類類的成員函數(shù)是類體中十分重要的部分。如果的成員函數(shù)是類體中十分重要的部分。如果一一個(gè)個(gè)類中不包含成員函數(shù),就等同于類中不包含成員函數(shù),就等同于C語言中的語言中的結(jié)構(gòu)體結(jié)構(gòu)體了了,體現(xiàn)不出類在面向?qū)ο蟪绦蛟O(shè)計(jì)中的作用。
32、,體現(xiàn)不出類在面向?qū)ο蟪绦蛟O(shè)計(jì)中的作用。418.3.2 在類外定義成員函數(shù)在類外定義成員函數(shù)可以在類體中可以在類體中只寫成員函數(shù)的聲明,而在類的外面只寫成員函數(shù)的聲明,而在類的外面進(jìn)行函數(shù)定義。進(jìn)行函數(shù)定義。class Student public : void display( ); /公用成員函數(shù)原型聲明公用成員函數(shù)原型聲明 private : int num; char name20; char sex;42void Student display( ) /在類外定義在類外定義display類函數(shù)類函數(shù) coutnum:numendl; coutname:nameendl; coutse
33、x:sexendl; Student stud1,stud2;/定義兩個(gè)類對(duì)象定義兩個(gè)類對(duì)象注意:注意:在類體中直接定義函數(shù)時(shí),不需要在函數(shù)名前面加在類體中直接定義函數(shù)時(shí),不需要在函數(shù)名前面加上類名,因?yàn)楹瘮?shù)屬于哪一個(gè)類是不言而喻的。上類名,因?yàn)楹瘮?shù)屬于哪一個(gè)類是不言而喻的。但成員函數(shù)在類外定義時(shí),必須在函數(shù)名前面加上類名予但成員函數(shù)在類外定義時(shí),必須在函數(shù)名前面加上類名予以限定。以限定。“ ”是作用域限定符或稱作用域運(yùn)算符,用它聲明函數(shù)是屬于哪個(gè)類是作用域限定符或稱作用域運(yùn)算符,用它聲明函數(shù)是屬于哪個(gè)類43如果在作用域運(yùn)算符如果在作用域運(yùn)算符“ ”的前面沒有類名,或者函數(shù)的前面沒有類名,或者
34、函數(shù)名名前面既無類名又無作用域運(yùn)算符前面既無類名又無作用域運(yùn)算符“ ”,如如 display( ) 或或 display( ) 表示表示display函數(shù)不屬于任何類,這個(gè)函數(shù)不是成員函數(shù)不屬于任何類,這個(gè)函數(shù)不是成員函數(shù),而是全局函數(shù),即非成員函數(shù)的一般普通函數(shù)。函數(shù),而是全局函數(shù),即非成員函數(shù)的一般普通函數(shù)。44 類函數(shù)類函數(shù)必須先在類體中作原型聲明,然后在類必須先在類體中作原型聲明,然后在類外外定義定義,也就是說類體的位置應(yīng)在函數(shù)定義之前,也就是說類體的位置應(yīng)在函數(shù)定義之前,否則否則編譯編譯時(shí)會(huì)出錯(cuò)。時(shí)會(huì)出錯(cuò)。 雖然雖然函數(shù)在類的外部定義,但在調(diào)用成員函數(shù)時(shí)函數(shù)在類的外部定義,但在調(diào)用成
35、員函數(shù)時(shí)會(huì)會(huì)根據(jù)根據(jù)在類中聲明的函數(shù)原型找到函數(shù)的定義,從而在類中聲明的函數(shù)原型找到函數(shù)的定義,從而執(zhí)行執(zhí)行該該函數(shù)。函數(shù)。 在類的內(nèi)部對(duì)成員函數(shù)作聲明,而在在類的內(nèi)部對(duì)成員函數(shù)作聲明,而在類體外定義成員函數(shù),這是程序設(shè)計(jì)的一種類體外定義成員函數(shù),這是程序設(shè)計(jì)的一種良好習(xí)慣。良好習(xí)慣。 如果一個(gè)函數(shù),其函數(shù)體只有如果一個(gè)函數(shù),其函數(shù)體只有2-3行,一行,一般可在聲明類時(shí)在類體中定義。多于般可在聲明類時(shí)在類體中定義。多于3行的函行的函數(shù),一般在類體內(nèi)聲明,在類外定義。數(shù),一般在類體內(nèi)聲明,在類外定義。45468.3.3 inline 成員函數(shù)成員函數(shù)類的成員函數(shù)也可以指定為內(nèi)置函數(shù)。類的成員函數(shù)
36、也可以指定為內(nèi)置函數(shù)。在類體中定義的成員函數(shù)的規(guī)模一般都很小在類體中定義的成員函數(shù)的規(guī)模一般都很小,為了,為了減少時(shí)減少時(shí)間開銷,如果在類體中定義的成員函數(shù)中不包括循環(huán)等間開銷,如果在類體中定義的成員函數(shù)中不包括循環(huán)等控制結(jié)構(gòu),控制結(jié)構(gòu),C+系統(tǒng)會(huì)自動(dòng)將它們作為內(nèi)置系統(tǒng)會(huì)自動(dòng)將它們作為內(nèi)置(inline )函數(shù)函數(shù)來處理。來處理。這樣可以大大減少調(diào)用成員函數(shù)的時(shí)間開銷。這樣可以大大減少調(diào)用成員函數(shù)的時(shí)間開銷。C+要求對(duì)要求對(duì)一般的內(nèi)置函數(shù)要用關(guān)鍵字一般的內(nèi)置函數(shù)要用關(guān)鍵字inline聲明,但對(duì)類內(nèi)定義的聲明,但對(duì)類內(nèi)定義的成員函數(shù),可以省略成員函數(shù),可以省略inline,因?yàn)檫@些成員函數(shù)已被,
37、因?yàn)檫@些成員函數(shù)已被隱含隱含地指定地指定為內(nèi)置函數(shù)。為內(nèi)置函數(shù)。47class Student public : void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; private : int num; char name20; char sex;48注意:注意:如果成員函數(shù)不在類體內(nèi)定義,而在類體外定如果成員函數(shù)不在類體內(nèi)定義,而在類體外定義,系統(tǒng)并不把它默認(rèn)為內(nèi)置函數(shù),調(diào)用這些成員函義,系統(tǒng)并不把它默認(rèn)為內(nèi)置函數(shù),調(diào)用這些成員函數(shù)的過程和調(diào)用一般函數(shù)的過程是相同的。如果想將數(shù)的過程和調(diào)用一般函數(shù)的過程是相
38、同的。如果想將這些成員函數(shù)指定為內(nèi)置函數(shù),應(yīng)當(dāng)用這些成員函數(shù)指定為內(nèi)置函數(shù),應(yīng)當(dāng)用inline作作顯式聲明顯式聲明。class Student public : inline void display( ); private : int num; char name20; char sex;將將display函數(shù)顯式地聲明為內(nèi)置函數(shù)。函數(shù)顯式地聲明為內(nèi)置函數(shù)。以上兩種寫法是等效的。對(duì)在類體內(nèi)定以上兩種寫法是等效的。對(duì)在類體內(nèi)定義的函數(shù),一般都省寫義的函數(shù),一般都省寫inline。49inline void Student display( ) / 在類外定義在類外定義display函數(shù)為內(nèi)置函
39、數(shù)函數(shù)為內(nèi)置函數(shù) coutnum:numendl; coutname:nameendl; coutsex:sexset_time(11,30,27);三者等價(jià)。三者等價(jià)。568.4.3 通過對(duì)象的引用變量來訪問對(duì)象中的成員通過對(duì)象的引用變量來訪問對(duì)象中的成員 如果為一個(gè)對(duì)象定義了一個(gè)引用變量,它們是如果為一個(gè)對(duì)象定義了一個(gè)引用變量,它們是共占同一段存儲(chǔ)單元的,實(shí)際上它們是同一個(gè)對(duì)象,共占同一段存儲(chǔ)單元的,實(shí)際上它們是同一個(gè)對(duì)象,只是用不同的名字表示而已。只是用不同的名字表示而已。因此完全可以通過引用變量來訪問對(duì)象中的成員。因此完全可以通過引用變量來訪問對(duì)象中的成員。 Time t1; /定義對(duì)
40、象定義對(duì)象t1 Time &t2=t1; /定義定義Time類引用變量類引用變量t2,并使之初始化為,并使之初始化為t1 couthour; cinminute; cinsecond;void Time:show_time( ) cout hour: minute: second endl;在類外定義在類外定義set_time函數(shù)函數(shù)在類外定義在類外定義show_time函數(shù)函數(shù)67int main( ) Time t1; t1.set_time( ); /向向t1對(duì)象的數(shù)據(jù)成員輸入數(shù)據(jù)對(duì)象的數(shù)據(jù)成員輸入數(shù)據(jù) t1.show_time( ); /輸出輸出t1對(duì)象的數(shù)據(jù)成員的值對(duì)象的數(shù)據(jù)成員的值
41、 Time t2; t2.set_time( ); /向向t2對(duì)象的數(shù)據(jù)成員輸入數(shù)據(jù)對(duì)象的數(shù)據(jù)成員輸入數(shù)據(jù) t2.show_time( ); /輸出輸出t2對(duì)象的數(shù)據(jù)成員的值對(duì)象的數(shù)據(jù)成員的值 return 0; 運(yùn)行結(jié)果:運(yùn)行結(jié)果:12 27 30 12:27:3017 50 26 17:50:2668注意:注意:(1) 在主函數(shù)中調(diào)用兩個(gè)成員函數(shù)時(shí),應(yīng)指明對(duì)象名在主函數(shù)中調(diào)用兩個(gè)成員函數(shù)時(shí),應(yīng)指明對(duì)象名 (t1,t2)。表示調(diào)用的是哪一個(gè)對(duì)象的成員函數(shù)。表示調(diào)用的是哪一個(gè)對(duì)象的成員函數(shù)。(2) 在類外定義函數(shù)時(shí),應(yīng)指明函數(shù)的作用域,如:在類外定義函數(shù)時(shí),應(yīng)指明函數(shù)的作用域,如: void
42、Time set_time( ) 在成員函數(shù)引用本對(duì)象的數(shù)據(jù)成員時(shí),只需直接寫數(shù)據(jù)在成員函數(shù)引用本對(duì)象的數(shù)據(jù)成員時(shí),只需直接寫數(shù)據(jù)成員名,這時(shí)成員名,這時(shí)C+系統(tǒng)會(huì)把它默認(rèn)為本對(duì)象的數(shù)據(jù)成員。系統(tǒng)會(huì)把它默認(rèn)為本對(duì)象的數(shù)據(jù)成員。(3) 應(yīng)注意區(qū)分什么場合用應(yīng)注意區(qū)分什么場合用域運(yùn)算符域運(yùn)算符“ ”,什么場合用,什么場合用成成員運(yùn)算符員運(yùn)算符“.”,不要搞混。,不要搞混。69例例8.4 找出一個(gè)整型數(shù)組中的元素的最大值。找出一個(gè)整型數(shù)組中的元素的最大值。用類來處理,比較不同方法的特點(diǎn)。用類來處理,比較不同方法的特點(diǎn)。class Array_max /聲明類聲明類 public : void set_value( ); /對(duì)數(shù)組元素設(shè)置值對(duì)數(shù)組元素設(shè)置值 void max_value(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全新電腦出租租賃合同(2025版)3篇
- 二零二五年度新能源汽車車輛掛靠運(yùn)營合作協(xié)議4篇
- 二零二五年度智能配送員勞動(dòng)合同模板4篇
- 二零二五年度體育賽事贊助商權(quán)益合作協(xié)議
- 《樓蓋樓面層》課件
- 二零二五年酒店拆除工程拆除現(xiàn)場監(jiān)控與應(yīng)急處置合同3篇
- 2025年度水利工程承包管理合同范本(二零二五版)4篇
- 二零二五年度窗簾布料阻燃性能檢測合同3篇
- 回順超前單軌吊的新型應(yīng)用
- 煤礦掘進(jìn)作業(yè)
- 繪本《圖書館獅子》原文
- 給水管道施工與安裝技術(shù)要求(課件)
- 警輔 培訓(xùn) 課件
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 法拍輔助工作管理制度
- 中控室保密與信息安全政策
- 后端開發(fā)年終總結(jié)
- 2023年管理學(xué)原理考試題庫附答案
- 萬達(dá)廣場營銷活動(dòng)管理及效果考核規(guī)定
- 過敏性皮炎的護(hù)理查房
- 【可行性報(bào)告】2023年電動(dòng)自行車相關(guān)項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論