程序設(shè)計版第8999章類和對象的進一步討論_第1頁
程序設(shè)計版第8999章類和對象的進一步討論_第2頁
程序設(shè)計版第8999章類和對象的進一步討論_第3頁
程序設(shè)計版第8999章類和對象的進一步討論_第4頁
程序設(shè)計版第8999章類和對象的進一步討論_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第第8 對象成員 決編寫大程序過程中的而產(chǎn)生的。車身和,最后把它們組裝在一起。在組裝時,各在一個系統(tǒng)中的多個象之通一定的 聯(lián)系,如圖8.1示意要使某一個對象實現(xiàn)某一種行為即操作,應(yīng)當(dāng)向它傳送相應(yīng)的消息。對象之間就是這樣通過發(fā)送接收息相聯(lián)的。 圖 圖 性”(encapsulation),所謂“封裝”,指兩方面的含為信息隱蔽(imformationhiding)。信息隱蔽還有利 容基本相同,只是者的基礎(chǔ)上增加一些屬性和的“軟件重用”(softwarereusability)的思想。在C++中,所謂多態(tài)性(polymorphism)是指:由繼 =程序=(對象+對象+對象+…)+消息 程序=對象s+消息 隨著軟件規(guī)模的迅速增大,軟件人員的問題十面向?qū)ο蠓治?object 是怎么做有(lss建面向?qū)ο笤O(shè)計(objectoriented面向?qū)ο缶幊?objectorientedprogramming,面向?qū)ο鬁y試(objectoriented它。面向?qū)ο鬁y試是用面向?qū)ο蟮姆椒ㄟM試,面向?qū)?(objectoriented很小。利用面向?qū)ο蟮姆椒ǔ绦?,大大提高了軟件的效率。現(xiàn)在設(shè)計一個大的軟件,是嚴(yán)格按照面向?qū)ο筌浖こ痰?個階段進行的,這個階段的工作不是由一個人從頭到尾完成的,而是由不同的人分別完成的。這樣,OOP階段的任務(wù)就比較簡單,程序編寫者只需要根據(jù)OOD 思路用面向?qū)ο笳Z言編寫類 體類型和結(jié)構(gòu)體變量的關(guān)系一樣,人們先一個 型,必須自己根據(jù)需要進行,或者使用別人已在C++中一個類類型和一個結(jié)構(gòu)體類型是下面是一個結(jié)構(gòu)體類型的方法:struct{intnum;

了一個名為Student的結(jié)構(gòu)體類Student //定義了兩個結(jié)構(gòu)體變量stud1和 class{intnum; void y(

//以class開 }

Student 改class{int void y(

<<endl;}Student //定義了兩個Student類的對 class{ accessspecifier)。 為了使程序清晰,應(yīng)該養(yǎng)成這樣的習(xí)慣:使每一 Student //Student是已 的類類在C++中 1classclassStudent2Student class{void y(

類類 公用部 <<endl;}intchar

私有部 //定義了兩個Student在定義Student類的同時,定義了兩個Student類的┆┆

以下部分為私 以下部分為公 //定義了兩個無類名的類 structint void y(

//用關(guān)鍵字struct 一個類類 以下部分為私//以下3行為數(shù)據(jù) 以下部分為公//成員 <<endl;}Student //定義了兩個Student類的 4以被指定為privtpulic或protced成員函數(shù)可以本類中任何成員(包括私有的和公用的),可以在本作用域中有效的數(shù)據(jù)。具函數(shù)(utilityfunction),類外用戶不能調(diào)用這些私以在類體中只寫成員函數(shù)的,而在類的外面進class{void y(intnum;

//公用成員函數(shù)原//以上3行是私有數(shù)據(jù)成void y( }

//在類外定義 y類函//函數(shù)Student //定義兩個類注意:在類體中直接定義函數(shù)時,不需要在函數(shù)名符(fieldqualifier)或稱作用域運算符,用它 y( 或 y(則表示disy函數(shù)不屬于任何類,這個函數(shù)不是成類函數(shù)必須先在類體中作原型,然后在類外定根據(jù)在類中的函數(shù)原型找到函數(shù)的定義(函數(shù) 類體中定義。多于3行的函數(shù),一般在類體內(nèi)聲明inlineC++要求對一般的內(nèi)置函數(shù)要用關(guān)鍵字iline 但對類內(nèi)定義的成員數(shù),可以省略inli因為這些成員函數(shù)已被隱地指為置函數(shù)。如classvoid y( }intnum; void y(inlinevoid y(將disy函數(shù)顯式地為內(nèi)置函數(shù)。以上兩種寫是相同的。如果想將這些成員函數(shù)指定為內(nèi)置函,應(yīng)當(dāng)用inline作顯 。class{inlinevoid y 此成員函數(shù)為內(nèi)intnum; inlinevoid y( }

//在類外定義 y函數(shù)為內(nèi)置函 方據(jù)和函數(shù)的代碼分配空間。按理說,如果用同象的數(shù)據(jù)和函數(shù)代碼分配單元,如圖8.4所示。圖圖顯然,這樣做會大大節(jié)約空間。C++編譯系統(tǒng)正是這樣做的,因此每個對象所占用的空間只是該對象的數(shù)據(jù)部分所占用的空間,而不包括函數(shù)代碼所占用的空間。如果classinthour;intsec;voidset()員函數(shù)無關(guān)。函數(shù)代碼是在對象空間之外的。 應(yīng)當(dāng)說明:常說的“某某對象的成員函數(shù)”,是從 的 通過指向?qū)ο蟮闹? //假設(shè)num已定義為公用 不僅可以在類外對象的公用數(shù)據(jù)成員,而且還可以調(diào)用對象的公用成員函數(shù),但同樣必須對 y( y(

//正確,調(diào)用對象stud1的公用成//錯誤,沒有指明是哪一個對象的 y函 //num是私有數(shù)據(jù)成 針,可以通過指針結(jié)構(gòu)體中的成員。用指針訪classintintcout<<p-

//數(shù)據(jù)成員是公用//定義對象t和指針變量//使p指向?qū)ο?/輸出p指向的對象中的成員通過對象的變量來對象中的成員如果為一個對象定義了一個變量,它們是共占同一段單元的,實際上它們是同一個對象,只變量來對象中的成員。如果已了TimeTimeTime

//定義對象//定義Time 變量t2,并使之初始化為//輸出對象t1中的成員 從前面的介紹已知:C++通過類來實現(xiàn)封裝性,把者說,類的作用是把數(shù)據(jù)和算法封裝在用戶的 (publicinterface),或者說是類的對外接口。 些功能是在類時已指定的,用戶可以使用它們可以看到:類中 (privateimplementation)。這種“類的公用接口與私 由于在頭文件中包含了類的,因此在程序中就員函數(shù)的,在程序中就可以調(diào)用這些對象的公class{void y(int

(這是頭文件,在此文件中進行類 void y( }

#include<iostream>intmain(){Student y(return}

頭文件包含進//執(zhí)行stud對象的 (″student.h″)而不用尖括號(<student.h>)圖8.6 類庫包括兩個組成部分:(1)類 頭文件;(2)已 這和在程序中使用C++系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)的方法是一樣的,例如用戶在調(diào)用sin函數(shù)時只需將包含聲明此函數(shù)的頭文件包含到程序中,即可調(diào)用該庫函數(shù),而不必了解sin函數(shù)是怎么實現(xiàn)的函數(shù)值是怎樣計算出來的。當(dāng)然,前提是系統(tǒng)已裝了標(biāo)準(zhǔn)函數(shù)庫。在用戶源文件經(jīng)過編譯后,與系統(tǒng)庫是目文件相連接。在用戶程序中包含類頭文件,類頭文件就提供了成員函數(shù)的函數(shù)原型,用戶只有通過頭實現(xiàn)。請?zhí)貏e注意:類和函數(shù)定義一般是分別 y();就是向?qū)ο髎tud發(fā)出的一個“消息”知它執(zhí)行其中的disy“方法”(即disy函數(shù))。上面這個語句涉及3stud是對象,disy()是方法,語句“stud.disy();”例8.1#includeusingnamespaceclassinthour;intsec;

//數(shù)據(jù)成員為公intmain({Timet1;

//定義t1為Time//輸入設(shè)定的return0;}

//輸出時1232 #include<iostream>usingnamespacestd;classTimeinthour;intsec;intmain({Timet1;

//輸出t1中數(shù)Timet2;

;//return}10322232問題,可以使用函數(shù)來進行輸入和輸出。見程序(b)。#include<iostream>usingnamespacestd;classTimeinthour;intsec;intmain({voidvoid

Timet1;

//調(diào)用set_time函數(shù),向t1對象中的數(shù)據(jù)成員輸入數(shù)Timet2;return0;}

//調(diào)用set_time函數(shù),向t2對象中的數(shù)據(jù)成員輸入數(shù)//調(diào)用show_time函數(shù),輸出t2對象中的數(shù){}

//定義函數(shù)set_time,形參t 變{

//定義函數(shù)show_time,形參t 變}

intmain({voidset_time(Time&,inthour=0,intminute=0,intsec=0);//Timet1;Timet2;return0;}

voidset_time(Time&t,inthour,intminute,int{}{} 例8.3將例8.2#include<iostream>usingnamespacestd;classTimevoidset_time();voidshow_time();inthour;intsec;intmain({

Timet1;t1.set_time();Timet2;

//調(diào)用對象t1的成員函數(shù)set_time,向t1的數(shù)據(jù)成員輸入數(shù)t2.set_time();return0;}

//調(diào)用對象t2的成員函數(shù)show_time,輸出t2的數(shù)據(jù)成員的{}

//在類外定義set_time函 //在類外定義show_time函{}。在類外定義函數(shù)時,應(yīng)指明函數(shù)的作用域(如voidTime∷set_time())。在成員函數(shù) 例8.4usingnamespaceclassvoidset_value();voidmax_value();intint

{intfor}

{inti;if(array[i

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論