




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、CPP_2 C+ 語言設(shè)計 第二章 類和對象 大連海事大學(xué)大連海事大學(xué) 陳余慶陳余慶 第一第一章章 C+的初步知識的初步知識 第二章第二章 類和對象類和對象 第三章 再論類和對象 第四章 運算符重載 第五章 繼承與派生 第六章 多態(tài)性與虛函數(shù) 第七章 輸入輸出流 第八章 C+工具 C+ 2- 2 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 2.2 類的聲明和對象的定義類的聲明和對象的定義 2.3 類的成員函數(shù)類的成員函數(shù) 2.4 對象成員的引用對象成員的引用 2.5 類和對象的舉例類和對象的舉例 2.6 類的封裝和信息的隱藏類的封裝和信息的隱藏 C+ 2- 3 2.1 面向?qū)ο蟪?/p>
2、序設(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是面向?qū)ο蟮某绦蛟O(shè)計什么是面向?qū)ο蟮某绦蛟O(shè)計? 面向?qū)ο蟮某绦蛟O(shè)計面向?qū)ο蟮某绦蛟O(shè)計(Object-Oriented Programming )和傳和傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計的思路完全不同。面向?qū)ο蟮某绦蛟O(shè)計統(tǒng)的結(jié)構(gòu)化程序設(shè)計的思路完全不同。面向?qū)ο蟮某绦蛟O(shè)計和人們?nèi)粘I罱鉀Q問題的思路是相似的。和人們?nèi)粘I罱鉀Q問題的思路是相似的。 比如,我們生產(chǎn)汽車時,不是順序制造發(fā)動機,在設(shè)計比如,我們生產(chǎn)汽車時,不是順序制造發(fā)動機,在設(shè)計制造底盤、車身、輪子。而是分別設(shè)計制造發(fā)動機、底盤、制造底盤、車身、輪子。而是分別設(shè)計制造發(fā)動機、底盤、車身和輪子,最后組裝
3、在一起。組裝時,各部件之間有聯(lián)系,車身和輪子,最后組裝在一起。組裝時,各部件之間有聯(lián)系,以便協(xié)調(diào)工作。例如,司機踩油門,就能調(diào)節(jié)油路,控制發(fā)以便協(xié)調(diào)工作。例如,司機踩油門,就能調(diào)節(jié)油路,控制發(fā)動機的轉(zhuǎn)速,就能驅(qū)動車輪。動機的轉(zhuǎn)速,就能驅(qū)動車輪。 C+ 2- 4 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 程序設(shè)計者的任務(wù)有兩個:一是設(shè)計所需要的類和對象,程序設(shè)計者的任務(wù)有兩個:一是設(shè)計所需要的類和對象,即確定那些數(shù)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)對即確定那些數(shù)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)對象發(fā)送消息,以啟動相關(guān)對象的操作。象發(fā)送消息,以啟動相關(guān)對象的操作。 編程者
4、如同一個總調(diào)度,不斷地向各個對象發(fā)出命令,編程者如同一個總調(diào)度,不斷地向各個對象發(fā)出命令,讓這些對象活動起來,完成指定的工作。讓這些對象活動起來,完成指定的工作。 這就是面向?qū)ο蟮某绦蛟O(shè)計的基本思路。這就是面向?qū)ο蟮某绦蛟O(shè)計的基本思路。 C+ 2- 5 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是對象什么是對象(object)? 一個對象由一組一個對象由一組“屬性屬性”和一組和一組“行為行為”構(gòu)成。并根據(jù)構(gòu)成。并根據(jù)外界給它的消息進(jìn)行相應(yīng)的操作。系統(tǒng)中多個對象通過一定外界給它的消息進(jìn)行相應(yīng)的操作。系統(tǒng)中多個對象通過一定的渠道相互聯(lián)系。的渠道相互聯(lián)系。 任何事物都可以看成一
5、個對象??梢允亲匀晃矬w,也可任何事物都可以看成一個對象。可以是自然物體,也可以是邏輯結(jié)構(gòu)。我們以一個班級為例。一個班級作為對象,以是邏輯結(jié)構(gòu)。我們以一個班級為例。一個班級作為對象,有兩個要素:一是班級的靜態(tài)特征,如班級所屬的專業(yè),學(xué)有兩個要素:一是班級的靜態(tài)特征,如班級所屬的專業(yè),學(xué)生人數(shù)、班主任姓名等,這種靜態(tài)特征稱為生人數(shù)、班主任姓名等,這種靜態(tài)特征稱為“屬性屬性”;另一;另一個是班級的動態(tài)特征,如上課,體育比賽,開會等,稱為個是班級的動態(tài)特征,如上課,體育比賽,開會等,稱為“行為行為”。外界向班級發(fā)一個信息(如上課鈴聲,廣播通。外界向班級發(fā)一個信息(如上課鈴聲,廣播通知),我們稱之為知)
6、,我們稱之為“消息消息”,班級就會發(fā)生一個操作(要么,班級就會發(fā)生一個操作(要么上課,要么開會)上課,要么開會) C+ 2- 6 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是什么是C+對象?對象? C+中,每個對象都由若干數(shù)據(jù)和若干函數(shù)組成。數(shù)據(jù)中,每個對象都由若干數(shù)據(jù)和若干函數(shù)組成。數(shù)據(jù)就是對象的就是對象的“屬性屬性”,函數(shù)就是用來對數(shù)據(jù)進(jìn)行的,函數(shù)就是用來對數(shù)據(jù)進(jìn)行的“操作操作”,以便實現(xiàn)某種功能。這種操作就是對象的以便實現(xiàn)某種功能。這種操作就是對象的“行為行為”,也叫,也叫“方法方法”。我們點擊一下鼠標(biāo),按動鍵盤的一個按鈕,就是。我們點擊一下鼠標(biāo),按動鍵盤的一個按鈕
7、,就是給某個對象一個消息,系統(tǒng)會調(diào)用該對象中的函數(shù)進(jìn)行操作。給某個對象一個消息,系統(tǒng)會調(diào)用該對象中的函數(shù)進(jìn)行操作。 比如長方形對象,其長和寬就是它的屬性,調(diào)用該對象比如長方形對象,其長和寬就是它的屬性,調(diào)用該對象的一些函數(shù),即向該對象傳送一些消息,可以用來對其長、的一些函數(shù),即向該對象傳送一些消息,可以用來對其長、寬值進(jìn)行加工計算,以實現(xiàn)求出面積、周長等功能。寬值進(jìn)行加工計算,以實現(xiàn)求出面積、周長等功能。 C+ 2- 7 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是對象封裝什么是對象封裝(encapsulation )? 就是把對象的不想讓外界知道的屬性和功能屏蔽起來,就
8、是把對象的不想讓外界知道的屬性和功能屏蔽起來,讓外界看不見。封裝有兩個含義,一是將有關(guān)的數(shù)據(jù)和操作讓外界看不見。封裝有兩個含義,一是將有關(guān)的數(shù)據(jù)和操作函數(shù)封裝成一個基本單位,即對象內(nèi)。各對象之間相互獨立,函數(shù)封裝成一個基本單位,即對象內(nèi)。各對象之間相互獨立,互不干擾;二是將對象中的部分屬性或功能對外隱蔽,只留互不干擾;二是將對象中的部分屬性或功能對外隱蔽,只留少數(shù)接口向外公布,以接收外界信息。少數(shù)接口向外公布,以接收外界信息。 對象封裝的好處在于,降低了人們操作對象的復(fù)雜程度。對象封裝的好處在于,降低了人們操作對象的復(fù)雜程度。使用對象的人,不必知道對象內(nèi)部的實現(xiàn)細(xì)節(jié),只需要了解使用對象的人,不
9、必知道對象內(nèi)部的實現(xiàn)細(xì)節(jié),只需要了解外部功能就可以自如地操作該對象。外部功能就可以自如地操作該對象。 對象的行為由類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作確定;外對象的行為由類的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和相關(guān)的操作確定;外部行為通過操作接口實現(xiàn)。人們關(guān)心的就是操作接口所能提部行為通過操作接口實現(xiàn)。人們關(guān)心的就是操作接口所能提供的服務(wù)。供的服務(wù)。 C+ 2- 8 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是抽象什么是抽象(abstraction)? 將具有相同特性的事物歸納、集中成一個統(tǒng)一類型,將具有相同特性的事物歸納、集中成一個統(tǒng)一類型,稱為抽象。比如,把張三,李四,王五歸納為一類,我們稱稱為抽
10、象。比如,把張三,李四,王五歸納為一類,我們稱之為之為“人人”。 抽象的作用,是表示同類事物的本質(zhì)。如果你會操作抽象的作用,是表示同類事物的本質(zhì)。如果你會操作自己家的電視機,看到別人家里的電視機即使牌子不同,你自己家的電視機,看到別人家里的電視機即使牌子不同,你也肯定會操作,因為所有電視機具有共同的特性。也肯定會操作,因為所有電視機具有共同的特性。 C和和C+中,數(shù)據(jù)類型就是對一批具體數(shù)據(jù)的抽象,整中,數(shù)據(jù)類型就是對一批具體數(shù)據(jù)的抽象,整形數(shù)據(jù)就是所有整數(shù)的抽象。形數(shù)據(jù)就是所有整數(shù)的抽象。 “類類”是是“對象對象”的抽象,的抽象,“對象對象”則是類的則是類的“特特例例”,或,或“具體表現(xiàn)形式具
11、體表現(xiàn)形式”。 C+ 2- 9 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是繼承什么是繼承( inherit )? 生產(chǎn)汽車,一般不會從頭開始設(shè)計,而是選擇已有的某生產(chǎn)汽車,一般不會從頭開始設(shè)計,而是選擇已有的某一型號汽車為藍(lán)本,增加、修改一些功能就行了。一型號汽車為藍(lán)本,增加、修改一些功能就行了。 軟件開發(fā)也是這樣,我們已經(jīng)有了一個名為軟件開發(fā)也是這樣,我們已經(jīng)有了一個名為“A”的類,的類,還想建立一個名為還想建立一個名為“B”的類,而后者內(nèi)容只是在前者的基礎(chǔ)的類,而后者內(nèi)容只是在前者的基礎(chǔ)上增加了少量內(nèi)容。我們顯然不必重新設(shè)計一個新類上增加了少量內(nèi)容。我們顯然不必重新
12、設(shè)計一個新類B,只需,只需要把要把A類拿過來,在此基礎(chǔ)上添加新內(nèi)容就可以了。這就是面類拿過來,在此基礎(chǔ)上添加新內(nèi)容就可以了。這就是面向?qū)ο蟪绦蛟O(shè)計的向?qū)ο蟪绦蛟O(shè)計的繼承機制繼承機制。 C+提供繼承機制,大大節(jié)省了編程工作量,這就是所提供繼承機制,大大節(jié)省了編程工作量,這就是所謂謂“軟件重用軟件重用( software reusability )”的思想。對于大型軟的思想。對于大型軟件的開發(fā)具有重要意義。件的開發(fā)具有重要意義。 C+ 2- 10 2.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?什么是多態(tài)性什么是多態(tài)性( polymorphism )? 如果有幾個相似而不同的對象,人們
13、往往要求在向它們?nèi)绻袔讉€相似而不同的對象,人們往往要求在向它們發(fā)出同一個消息時,各自作出不同的操作,這種情況就是發(fā)出同一個消息時,各自作出不同的操作,這種情況就是“多態(tài)現(xiàn)象多態(tài)現(xiàn)象”。 比如,高二比如,高二1,2,3班,聽到上課鈴后,作出的動作是班,聽到上課鈴后,作出的動作是各自走進(jìn)自己的教室上課,而不會走錯教室。各自走進(jìn)自己的教室上課,而不會走錯教室。 C+中,所謂多態(tài)性是指,由繼承而產(chǎn)生的相關(guān)的不同中,所謂多態(tài)性是指,由繼承而產(chǎn)生的相關(guān)的不同的類,其對象對同一消息會作出不同的響應(yīng)。的類,其對象對同一消息會作出不同的響應(yīng)。 顯然,多態(tài)性能增加程序的靈活性,它是面向?qū)ο蟪绦蝻@然,多態(tài)性能增加
14、程序的靈活性,它是面向?qū)ο蟪绦蛟O(shè)計的重要特征。設(shè)計的重要特征。 C+ 2- 11 填空題填空題 1.面向?qū)ο蟮南到y(tǒng)最突出的特性是面向?qū)ο蟮南到y(tǒng)最突出的特性是 、 、 。 2.C+語言是一種計算機編程語言,利用它編寫的程序并不能語言是一種計算機編程語言,利用它編寫的程序并不能直接在計算機上運行,而是要經(jīng)過直接在計算機上運行,而是要經(jīng)過 、 和和 生生成可執(zhí)行文件。成可執(zhí)行文件。 C+ 2- 12 【 C+語言與面向?qū)ο蟮某绦蛟O(shè)計語言與面向?qū)ο蟮某绦蛟O(shè)計】 面向?qū)ο蟮某绦蛟O(shè)計是在吸收結(jié)構(gòu)化程序設(shè)計的一切優(yōu)點的基礎(chǔ)面向?qū)ο蟮某绦蛟O(shè)計是在吸收結(jié)構(gòu)化程序設(shè)計的一切優(yōu)點的基礎(chǔ)上發(fā)展起來的一種新的程序設(shè)計方
15、法,其本質(zhì)是把數(shù)據(jù)和處理數(shù)據(jù)的上發(fā)展起來的一種新的程序設(shè)計方法,其本質(zhì)是把數(shù)據(jù)和處理數(shù)據(jù)的過程抽象成一個具有特定身份和某些屬性的自包含實體過程抽象成一個具有特定身份和某些屬性的自包含實體對象對象。 面向?qū)ο笙到y(tǒng)最突出特點是封裝性、繼承性和多態(tài)性面向?qū)ο笙到y(tǒng)最突出特點是封裝性、繼承性和多態(tài)性 在面向?qū)ο蟮某绦蛟O(shè)計在面向?qū)ο蟮某绦蛟O(shè)計中,封裝是一種數(shù)據(jù)隱中,封裝是一種數(shù)據(jù)隱藏技術(shù),它通過把一組藏技術(shù),它通過把一組數(shù)據(jù)和與數(shù)據(jù)有關(guān)的操數(shù)據(jù)和與數(shù)據(jù)有關(guān)的操作集合放在一起形成對作集合放在一起形成對象來實現(xiàn)。對象通過操象來實現(xiàn)。對象通過操作接口與外部發(fā)生聯(lián)系作接口與外部發(fā)生聯(lián)系,而內(nèi)部的具體細(xì)節(jié)則,而內(nèi)部
16、的具體細(xì)節(jié)則被隱藏起來,對外是不被隱藏起來,對外是不可見的??梢姷?。 C+多態(tài)性是指多態(tài)性是指相同的消息相同的消息為不同的對為不同的對象接收到時象接收到時,可能導(dǎo)致,可能導(dǎo)致不同的動作不同的動作。 在面向?qū)ο蟮某绦蛟O(shè)計在面向?qū)ο蟮某绦蛟O(shè)計中,同樣有著繼承的機中,同樣有著繼承的機制。通過繼承,程序可制。通過繼承,程序可以在擴展現(xiàn)有類的基礎(chǔ)以在擴展現(xiàn)有類的基礎(chǔ)上聲明新類。其中新類上聲明新類。其中新類被稱作原有類的子類或被稱作原有類的子類或派生類,原有類稱作基派生類,原有類稱作基類,又叫父類。類,又叫父類。 2- 132.1 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 ?類與對象的作用類與對象
17、的作用 C+全面支持傳統(tǒng)的面向過程的程序設(shè)計(即結(jié)構(gòu)化編全面支持傳統(tǒng)的面向過程的程序設(shè)計(即結(jié)構(gòu)化編程),也支持基于對象和面向?qū)ο蟮某绦蛟O(shè)計。程),也支持基于對象和面向?qū)ο蟮某绦蛟O(shè)計。 所謂基于對象,是指程序是以類和對象為基礎(chǔ),程序的操所謂基于對象,是指程序是以類和對象為基礎(chǔ),程序的操作是圍繞對象進(jìn)行的。作是圍繞對象進(jìn)行的。 所謂面向?qū)ο?,是指,在基于對象的基礎(chǔ)上,利用了繼承所謂面向?qū)ο?,是指,在基于對象的基礎(chǔ)上,利用了繼承機制和多態(tài)性。機制和多態(tài)性。 ?面向?qū)ο蟮某绦蛟O(shè)計特點面向?qū)ο蟮某绦蛟O(shè)計特點: 類具有對數(shù)據(jù)的抽象性、封裝性、繼承性、多態(tài)性。類具有對數(shù)據(jù)的抽象性、封裝性、繼承性、多態(tài)性。
18、 C+ 2- 14 2.2 類的聲明和對象的定義類的聲明和對象的定義 ?類和對象的關(guān)系類和對象的關(guān)系 每一個實體都可以作為對象,一些對象具有相同的結(jié)構(gòu)每一個實體都可以作為對象,一些對象具有相同的結(jié)構(gòu)和特性。如高一和特性。如高一1班,班,2班,班,3班。他們是不同的對象,但具有班。他們是不同的對象,但具有完全相同的結(jié)構(gòu)的特性。每個對象都屬于一個特定的類型。完全相同的結(jié)構(gòu)的特性。每個對象都屬于一個特定的類型。 C+中,對象的類型稱為類中,對象的類型稱為類( class )。類代表了某一批對。類代表了某一批對象的共同特性。前面已經(jīng)談到,類是對象的抽象,而對象是類象的共同特性。前面已經(jīng)談到,類是對象的
19、抽象,而對象是類的具體實例的具體實例( instance )。就象結(jié)構(gòu)體類型和結(jié)構(gòu)體變量一樣。就象結(jié)構(gòu)體類型和結(jié)構(gòu)體變量一樣。 C+中,我們先聲明一個類的類型,然后再定義該類的若中,我們先聲明一個類的類型,然后再定義該類的若干對象。對象就是類這種類型的一個變量。類是抽象的,不占干對象。對象就是類這種類型的一個變量。類是抽象的,不占內(nèi)存,而對象是具體的,要占用內(nèi)存空間。內(nèi)存,而對象是具體的,要占用內(nèi)存空間。 C+ 2- 15 2.2 類的聲明和對象的定義類的聲明和對象的定義 ?類的聲明類的聲明 類的聲明方法和結(jié)構(gòu)體的聲明方法一樣,只是將關(guān)鍵字類的聲明方法和結(jié)構(gòu)體的聲明方法一樣,只是將關(guān)鍵字str
20、uct 換成換成class: class 類名類名 private: ; 別忘了必須用分號結(jié)束!別忘了必須用分號結(jié)束! C+ 2- 16 成員訪問限定符成員訪問限定符 ( member access specifier ) 私有數(shù)據(jù)成員和私有成員函數(shù);私有數(shù)據(jù)成員和私有成員函數(shù); 成員訪問限定符成員訪問限定符 public: 公共數(shù)據(jù)成員和公共成員函數(shù);公共數(shù)據(jù)成員和公共成員函數(shù); ( member access specifier ) 2.2 類的聲明和對象的定義類的聲明和對象的定義 類的聲明示例類的聲明示例 只能通過公有成員函數(shù)間接訪問只能通過公有成員函數(shù)間接訪問 class rectan
21、gle private: int length, width, area, perimeter ; public: void PutArea ( ) 在類的外面可以訪問公有成員在類的外面可以訪問公有成員 area = length * width; void PutPerimeter ( ) perimeter = (length + width ) * 2; void display ( ) cout “l(fā)ength = “ length endl; cout “width = “ width endl; cout “area = “ area endl; cout “perimeter =
22、 “ perimeter endl; ; ?C+ 2- 17 在類的外面不能訪問私有成員,在類的外面不能訪問私有成員, 2.2 類的聲明和對象的定義類的聲明和對象的定義 ?對象的定義對象的定義 聲明了類以后,就可以定義該類的對象了。其格式為:聲明了類以后,就可以定義該類的對象了。其格式為: class 類名類名 對象名對象名1,對象名,對象名2, / 方括號表示可選項方括號表示可選項 ?對象定義示例對象定義示例 如前例中,聲明了一個名為如前例中,聲明了一個名為 rectangle 的類,我們可以定義該的類,我們可以定義該類的若干對象:類的若干對象: ?rectangle r1, r2, r3;
23、 對象定義說明對象定義說明 類的聲明和對象的定義可以像結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定類的聲明和對象的定義可以像結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義一樣,合在一起完成。請同學(xué)們自己閱讀教材義一樣,合在一起完成。請同學(xué)們自己閱讀教材48頁的內(nèi)容。頁的內(nèi)容。 C+ 2- 18 2.3 類的成員函數(shù)類的成員函數(shù) ? 成員函數(shù)的性質(zhì)成員函數(shù)的性質(zhì) 類的成員函數(shù)也叫類函數(shù),用法和一般函數(shù)基本上一樣。類的成員函數(shù)也叫類函數(shù),用法和一般函數(shù)基本上一樣。區(qū)別在于它只是屬于一個類的成員而出現(xiàn)在類中。它可以被指區(qū)別在于它只是屬于一個類的成員而出現(xiàn)在類中。它可以被指定為類的私有成員定為類的私有成員( private )、公有
24、成員、公有成員( public )或保護(hù)成員或保護(hù)成員( protected )。 使用類函數(shù)時,要注意它的使用權(quán)限,如果是私有成員,使用類函數(shù)時,要注意它的使用權(quán)限,如果是私有成員,只能被本類的其他成員函數(shù)調(diào)用,不能被類外調(diào)用。成員函數(shù)只能被本類的其他成員函數(shù)調(diào)用,不能被類外調(diào)用。成員函數(shù)可以調(diào)用本類所有數(shù)據(jù)成員和成員函數(shù),也可以引用在本作用可以調(diào)用本類所有數(shù)據(jù)成員和成員函數(shù),也可以引用在本作用域中的有效數(shù)據(jù)。域中的有效數(shù)據(jù)。 通常,我們把類的數(shù)據(jù)成員定義成私有成員,對外屏蔽,通常,我們把類的數(shù)據(jù)成員定義成私有成員,對外屏蔽,而把成員函數(shù)定義成公有成員,他可以調(diào)用私有成員和其它成而把成員函數(shù)
25、定義成公有成員,他可以調(diào)用私有成員和其它成員。員。 一個類若沒有成員函數(shù),就退化成一個類若沒有成員函數(shù),就退化成C語言的結(jié)構(gòu)體,而失語言的結(jié)構(gòu)體,而失去意義。去意義。 C+ 2- 19 2.3 類的成員函數(shù)類的成員函數(shù) 在類外定義成員函數(shù)在類外定義成員函數(shù) 成員函數(shù)一般在類體中定義,如前面所講。也可以在類成員函數(shù)一般在類體中定義,如前面所講。也可以在類外定義,但要指明是屬于哪個類的成員函數(shù),用外定義,但要指明是屬于哪個類的成員函數(shù),用“類名類名:函數(shù)函數(shù)名名”來指定。例如:來指定。例如: ?class rectangle private: int length, width,; int are
26、a, perimeter ; public: void PutArea ( ); void PutPerimeter ( ); void display ( ); ; void rectangle: PutArea ( ) area = length * width; void rectangle: PutPerimeter ( ) perimeter = (length + width ) * 2; void rectangle: display ( ) cout “l(fā)ength = “ length endl; cout “width = “ width endl; cout “area
27、= “ area endl; cout “perimeter = “ perimeter ; rectangle r1, r2, r3; C+ 2- 20 這種類定義包括兩個部分:這種類定義包括兩個部分: 1、聲明部分、聲明部分(“做什么做什么”): 數(shù)據(jù)成員數(shù)據(jù)成員(名稱、類型名稱、類型) 成員函數(shù)成員函數(shù)(方法方法) 2、實現(xiàn)部分、實現(xiàn)部分(“怎么做怎么做”): 成員函數(shù)的定義和實現(xiàn)成員函數(shù)的定義和實現(xiàn) C+ 2- 21 2.3 類的成員函數(shù)類的成員函數(shù) 其中,其中,“:”成為域限定符。如果在域限定符前沒有類成為域限定符。如果在域限定符前沒有類名,或函數(shù)名前既沒有類名,又沒有域限定符:名,
28、或函數(shù)名前既沒有類名,又沒有域限定符: :display ( ) 或或 display ( ) 則表示該函數(shù)不屬于任何類,它不是成員函數(shù),而是全局函則表示該函數(shù)不屬于任何類,它不是成員函數(shù),而是全局函數(shù),即普通函數(shù)。數(shù),即普通函數(shù)。 ?inline 成員函數(shù)成員函數(shù) 類的成員函數(shù)也可以指定為內(nèi)聯(lián)函數(shù),只要是函數(shù)代碼類的成員函數(shù)也可以指定為內(nèi)聯(lián)函數(shù),只要是函數(shù)代碼較少,有頻繁使用。我們只要在成員函數(shù)的類型前面加上較少,有頻繁使用。我們只要在成員函數(shù)的類型前面加上inline 關(guān)鍵字就可以。關(guān)鍵字就可以。 C+ 2- 22 2.3 類的成員函數(shù)類的成員函數(shù) ?成員函數(shù)的存儲方式成員函數(shù)的存儲方式
29、同一類定義了多個對象時,每個對象的數(shù)據(jù)成員各自占同一類定義了多個對象時,每個對象的數(shù)據(jù)成員各自占據(jù)獨立的空間,而共享一個共用的函數(shù)代碼段,不占用對象據(jù)獨立的空間,而共享一個共用的函數(shù)代碼段,不占用對象的存儲空間。那么不同對象使用的是同一個函數(shù)代碼段,如的存儲空間。那么不同對象使用的是同一個函數(shù)代碼段,如何區(qū)分不同對象呢?何區(qū)分不同對象呢? C+為此專門設(shè)立了一個名為為此專門設(shè)立了一個名為 this 的指針,用來指向不的指針,用來指向不同的對象。當(dāng)調(diào)用對象同的對象。當(dāng)調(diào)用對象r1,成員函數(shù)訪問的就是,成員函數(shù)訪問的就是r1的成員。的成員。 對象對象r1 對象對象r2 對象對象r10 數(shù)據(jù)數(shù)據(jù)1
30、數(shù)據(jù)數(shù)據(jù)2 數(shù)據(jù)數(shù)據(jù)10 共用函數(shù)代碼共用函數(shù)代碼 C+ 2- 23 2.4 對象成員的引用對象成員的引用 ?用對象名和成員運算符用對象名和成員運算符( . )訪問對象成員訪問對象成員 class rectangle public: int length, width; / 公有數(shù)據(jù)成員公有數(shù)據(jù)成員 void display ( ); / 公有成員函數(shù)公有成員函數(shù) ; void rectangle: display ( ) cout “area =“ length* width ednl; cout“perimeter =“ length class rectangle public: int
31、 length, width; / 公共數(shù)據(jù)成員公共數(shù)據(jù)成員 void display ( ); / 公共成員函數(shù)公共成員函數(shù) ; void rectangle: display ( ) cout “area =“ length* width ednl; cout“perimeter =“ lenght = 5; p-width = 4; p-display ( ); C+ 2- 25 2.4 對象成員的引用對象成員的引用 ?用對象的引用訪問對象成員用對象的引用訪問對象成員 public: int length, width; / 公共數(shù)據(jù)成員公共數(shù)據(jù)成員 void display ( );
32、/ 公共成員函數(shù)公共成員函數(shù) ; void rectangle: display ( ) cout “area =“ length* width ednl; cout“perimeter =“ ( length+ width)*2; void main ( ) rectangle r2; rectangle &r3 = r2; /r3引用引用r2 r3.lenght = 5; r3.width = 4; r3.display ( ); class rectangle 舉例:舉例: C+ 2- 26 編程練習(xí)編程練習(xí) 請同學(xué)們自己閱讀教材請同學(xué)們自己閱讀教材55頁頁2.5節(jié)的簡單節(jié)的簡單示例程序
33、。然后編寫下列程序:示例程序。然后編寫下列程序: 輸入三個整數(shù),并輸出它們之中的最大輸入三個整數(shù),并輸出它們之中的最大值。值。 C+ 2- 27 2.6 類的封裝和信息隱蔽類的封裝和信息隱蔽 ?公用接口和私有實現(xiàn)的分離公用接口和私有實現(xiàn)的分離 我們已經(jīng)學(xué)到,我們已經(jīng)學(xué)到,C+通過類的封裝,將類的數(shù)據(jù)成員和通過類的封裝,將類的數(shù)據(jù)成員和成員函數(shù)集成到一個類中。而一般在類的聲明時,往往把數(shù)成員函數(shù)集成到一個類中。而一般在類的聲明時,往往把數(shù)據(jù)成員指定成私有的,使它們與外界隔離,即,不能在類外據(jù)成員指定成私有的,使它們與外界隔離,即,不能在類外直接使用私有成員,外界只能通過類的公有函數(shù),間接進(jìn)行直接
34、使用私有成員,外界只能通過類的公有函數(shù),間接進(jìn)行對私有成員的操作。換句話說,外界與類的私有成員的唯一對私有成員的操作。換句話說,外界與類的私有成員的唯一聯(lián)系渠道,就是該類的公有成員函數(shù)。聯(lián)系渠道,就是該類的公有成員函數(shù)。 所以,我們一般把成員函數(shù)指定成公有的所以,我們一般把成員函數(shù)指定成公有的( public )性性質(zhì)(除非某些成員函數(shù)不想讓外界調(diào)用)。質(zhì)(除非某些成員函數(shù)不想讓外界調(diào)用)。 這就是所謂的這就是所謂的“外部接口外部接口”與內(nèi)部實現(xiàn)的分離,以起與內(nèi)部實現(xiàn)的分離,以起到信息隱蔽的作用。而這是軟件工程最基本的原則。到信息隱蔽的作用。而這是軟件工程最基本的原則。 C+ 2- 28 定義
35、一個類就是實定義一個類就是實現(xiàn)對創(chuàng)建一個對象的現(xiàn)對創(chuàng)建一個對象的數(shù)據(jù)結(jié)構(gòu)的描述。數(shù)據(jù)結(jié)構(gòu)的描述。 在類中,一些成員在類中,一些成員是保護(hù)的,被有效地是保護(hù)的,被有效地屏蔽,以防外界的干屏蔽,以防外界的干擾和誤操作。擾和誤操作。 另一些成員是公共另一些成員是公共的,作為接口提供外的,作為接口提供外界使用。界使用。 右圖是對它們采用右圖是對它們采用的圖示方法說明類的的圖示方法說明類的組成結(jié)構(gòu)。以組成結(jié)構(gòu)。以Point 類為例。類為例。 C+ Point 類類 xoffset yoffset 訪訪問問接接set x 口口 y angle radius 2- 29 封封裝裝體體 內(nèi)內(nèi)部部數(shù)數(shù)據(jù)據(jù)成成員
36、員 2.6 類的封裝和信息隱蔽類的封裝和信息隱蔽 ?類聲明和成員函數(shù)定義的分離類聲明和成員函數(shù)定義的分離 當(dāng)一個類被多個程序使用時,一般將類的聲明(包括當(dāng)一個類被多個程序使用時,一般將類的聲明(包括成員函數(shù)的聲明)放在指定的頭文件中,用戶在編程時,成員函數(shù)的聲明)放在指定的頭文件中,用戶在編程時,將該頭文件包含近來就可以了。而不必在每個使用該類的將該頭文件包含近來就可以了。而不必在每個使用該類的程序中重復(fù)書寫該類的聲明。程序中重復(fù)書寫該類的聲明。 我們?nèi)缓罂梢灾苯釉诔绦蛑兄苯佣x該類的對象,直我們?nèi)缓罂梢灾苯釉诔绦蛑兄苯佣x該類的對象,直接調(diào)用該類的公有成員函數(shù)。為了實現(xiàn)信息隱蔽,對類的接調(diào)用該類的公有成員函數(shù)。為了實現(xiàn)信息隱蔽,對類的成員函數(shù)的定義一般不放在頭文件中,而放在另一個文件成員函數(shù)的定義一般不放在頭文件中,而放在另一個文件中。中。 然后按照對多文件程序的編譯和運行方法對程序進(jìn)行然后按照對多文件程序的編譯和運行方法對程序進(jìn)行編譯和連接。請看下面示例。編譯和連接。請看下面示例。 C+ 2- 30 2.6 類的封裝和信息隱蔽類的封裝和信息隱蔽 / rectangle.h class rectangle private: int length, width; public: void
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024成都工貿(mào)職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘筆試真題
- 2025年板栗機械化剝殼去衣機項目發(fā)展計劃
- 第3課時 按比分配教案 人教版數(shù)學(xué)六年級上冊
- 2024年新疆維吾爾自治區(qū)消防救援總隊招錄消防員真題
- 2025年內(nèi)蒙古事業(yè)單位招聘考試筆試試題【答案】
- 消費信貸對消費行為的影響分析
- 消防員工作匯報
- 項目洞室開挖施工安全防護(hù)措施
- 電話客服實習(xí)報告范文4篇
- 2025年物理特性分析產(chǎn)品項目建議書
- 2024年綏陽縣選聘城市社區(qū)工作者筆試真題
- 公文寫作技能題庫及答案
- 2025年廣東省中考語文試卷真題(含答案解析)
- 遼寧省“三支一扶”招募考試真題2024
- 2025中國內(nèi)地薪酬指南-kos高奧士國際-202506
- 算法歧視的法律規(guī)制-洞察及研究
- 2025廣西專業(yè)技術(shù)人員公需科目培訓(xùn)考試答案
- 春夏季傳染病防治知識
- 機械制造企業(yè)安全檢查表
- 第二章汽車車身常用材料學(xué)習(xí)教案
- 骨病病理知識
評論
0/150
提交評論