![c++譚浩強(qiáng)教學(xué)修訂(周四學(xué)時(shí))_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/31/4b44ff60-24fa-46c6-99d5-e30fffed04f0/4b44ff60-24fa-46c6-99d5-e30fffed04f01.gif)
![c++譚浩強(qiáng)教學(xué)修訂(周四學(xué)時(shí))_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/31/4b44ff60-24fa-46c6-99d5-e30fffed04f0/4b44ff60-24fa-46c6-99d5-e30fffed04f02.gif)
![c++譚浩強(qiáng)教學(xué)修訂(周四學(xué)時(shí))_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/31/4b44ff60-24fa-46c6-99d5-e30fffed04f0/4b44ff60-24fa-46c6-99d5-e30fffed04f03.gif)
![c++譚浩強(qiáng)教學(xué)修訂(周四學(xué)時(shí))_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/31/4b44ff60-24fa-46c6-99d5-e30fffed04f0/4b44ff60-24fa-46c6-99d5-e30fffed04f04.gif)
![c++譚浩強(qiáng)教學(xué)修訂(周四學(xué)時(shí))_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/31/4b44ff60-24fa-46c6-99d5-e30fffed04f0/4b44ff60-24fa-46c6-99d5-e30fffed04f05.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二章 類(lèi)和對(duì)象2.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述211 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念一、對(duì)象 二、類(lèi) 三、消息 四、方法212 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征一、抽象 二、封裝 三、繼承 四、多態(tài)213 面向?qū)ο蟮某绦蛟O(shè)計(jì)的特點(diǎn)(p40)214 面向?qū)ο蟮能浖_(kāi)發(fā)過(guò)程(p4243)2.2類(lèi)的聲明和對(duì)象的定義一、類(lèi)和對(duì)象的關(guān)系(P44)二、聲明類(lèi)類(lèi)型三、定義對(duì)象的方法(P46)四、類(lèi)和結(jié)構(gòu)體的異同(P48)2.3 類(lèi)的成員函數(shù)一、成員函數(shù)的性質(zhì)(P49)二、在類(lèi)外定義成員函數(shù)三、inline成員函數(shù)四、成員函數(shù)的存儲(chǔ)方式(P52)2.4 對(duì)象成員的引用一、通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員二、通過(guò)指
2、向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員(P55)三、通過(guò)對(duì)象的引用訪問(wèn)對(duì)象中的成員2.5 類(lèi)和對(duì)象的簡(jiǎn)單應(yīng)用舉例2.6 類(lèi)的封裝性和信息隱蔽一、公用接口與私有實(shí)現(xiàn)的分離二、類(lèi)聲明和成員函數(shù)定義的分離三、面向?qū)ο蟪绦蛟O(shè)計(jì)中的幾個(gè)名詞2.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述211 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念一、對(duì)象從一般意義上講,對(duì)象是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物,它可以是有形的(比如一輛汽車(chē)),也可以是無(wú)形的(比如一項(xiàng)計(jì)劃)。對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它具有自己的靜態(tài)特征(狀態(tài))和動(dòng)態(tài)特征(操作)。靜態(tài)特征即可以用某種數(shù)據(jù)來(lái)描述的特征,動(dòng)態(tài)特征即對(duì)象所表現(xiàn)的行為或?qū)ο笏哂械墓δ堋#ú煌膶?duì)象其具有的靜態(tài)特征和
3、動(dòng)態(tài)特征是不一樣的)1現(xiàn)實(shí)世界中的對(duì)象現(xiàn)實(shí)世界中對(duì)象具有的共同特性:名字、屬性、一組操作(每個(gè)操作決定對(duì)象一種的行為)2計(jì)算機(jī)中的對(duì)象對(duì)象是待解決問(wèn)題中的客觀事物表示。對(duì)象的屬性表示客觀事物的靜態(tài)特征,一般用數(shù)據(jù)描述;對(duì)象的操作是描述客觀事物的動(dòng)態(tài)特性,即事物的行為,一般用函數(shù)或稱(chēng)方法來(lái)表達(dá)。計(jì)算機(jī)中的對(duì)象是一系列具有描寫(xiě)特定結(jié)構(gòu)的數(shù)據(jù)(屬性)和建立在這些數(shù)據(jù)上的操作(行為),通過(guò)這些數(shù)據(jù)和操作,對(duì)象可以完成一系列的任務(wù),因此說(shuō),對(duì)象是構(gòu)成計(jì)算機(jī)程序的基本單位。二、類(lèi)1現(xiàn)實(shí)世界中類(lèi)是一組具有相同屬性和行為的對(duì)象的抽象。類(lèi)和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系,類(lèi)是多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,一個(gè)對(duì)
4、象是類(lèi)的一個(gè)實(shí)例。2計(jì)算機(jī)中的類(lèi)就是具有相同的數(shù)據(jù)和相同的操作的一組對(duì)象的集合。即:類(lèi)是具有相同數(shù)據(jù)結(jié)構(gòu)(屬性)和相同操作(行為)的一類(lèi)對(duì)象的描述。實(shí)際上,類(lèi)也是一種類(lèi)型,這種類(lèi)型是自定義的,其中包含有數(shù)據(jù)結(jié)構(gòu)和操作(方法)兩部分,而對(duì)象是某個(gè)類(lèi)的一個(gè)實(shí)例。例如:class stud /以calss開(kāi)頭,定義類(lèi)stud int num; char name10; char sex; void display() cout<<”num : “<<num <<endl; cout<<”name : “<<name <<endl
5、; cout<<”swx : “<<sex <<endl; ;stud stud1,stud2; /定義兩個(gè)stud類(lèi)的對(duì)象stud1,stud2。三、消息一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求被稱(chēng)為“消息”,消息是一個(gè)對(duì)象要求另一個(gè)對(duì)象執(zhí)行某個(gè)操作的規(guī)格的說(shuō)明,通過(guò)消息傳遞能夠完成對(duì)象之間的相互請(qǐng)求或相互協(xié)作。發(fā)送消息的對(duì)象稱(chēng)為發(fā)送者,接受消息的對(duì)象稱(chēng)為接收者。對(duì)象間的聯(lián)系只能通過(guò)消息來(lái)進(jìn)行。對(duì)象在接收到消息時(shí)才被激活。消息一般有三部分:接受對(duì)象名、調(diào)用操作名、參數(shù)。消息可分為公有消息和私有消息。消息具有三個(gè)性質(zhì):(1) 同一對(duì)象可接收不同形式的多個(gè)消息,產(chǎn)生不同
6、響應(yīng);(2) 相同形式的消息可以送給不同對(duì)象,所做出的響應(yīng)可以截然不同;(3) 消息的發(fā)送可以不考慮具體的接收者,對(duì)象可以響應(yīng)消息,也可對(duì)消息不予理會(huì)。四、方法方法就是對(duì)象所能執(zhí)行的操作。1方法包括兩部分:界面和方法體。其中:界面是指: 方法的調(diào)用協(xié)議。方法體是指:實(shí)現(xiàn)某種操作的一系列計(jì)算步驟,即一段程序。2消息和方法的關(guān)系對(duì)象根據(jù)接收到的消息,調(diào)用相應(yīng)的方法;反過(guò)來(lái),有了方法,對(duì)象才能響應(yīng)相應(yīng)的消息。212 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征一、抽象所謂抽象是指:通過(guò)特定的實(shí)例(對(duì)象)抽取共同性質(zhì)以后形成概念的過(guò)程。抽象包括兩個(gè)方面:數(shù)據(jù)抽象和代碼抽象。其中:數(shù)據(jù)抽象:用于描述某類(lèi)對(duì)象的屬性和狀況;
7、代碼抽象:用于描述某類(lèi)對(duì)象的共同行為特征或具有的共同操作。注意:對(duì)同一類(lèi)研究對(duì)象,由于所研究問(wèn)題的側(cè)重點(diǎn)不同就可能產(chǎn)生不同的抽象結(jié)果。二、封裝1封裝的概念是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來(lái)存放在對(duì)象的內(nèi)部,并盡可能的隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。封裝是面向?qū)ο蠓椒ǖ囊粋€(gè)重要原則。它有兩個(gè)涵義:第一個(gè)涵義是,把對(duì)象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位(即對(duì)象)。第二個(gè)涵義也稱(chēng)作“信息隱蔽”,即盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界(或者說(shuō)形成一道屏障),只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。這主要是指對(duì)象的外部不能直接地存取對(duì)象地屬性,只能通過(guò)幾個(gè)允許外部使用地服務(wù)與對(duì)象發(fā)生聯(lián)
8、系。2封裝的目的封裝的目的在于將對(duì)象的使用者與對(duì)象設(shè)計(jì)者分開(kāi),簡(jiǎn)化使用者的工作,提高效率。而對(duì)于設(shè)計(jì)者來(lái)說(shuō),也可以簡(jiǎn)化外界的干擾,提高整體效率。對(duì)于軟件設(shè)計(jì)而言,為了盡量避免某個(gè)模塊的行為干擾同一系統(tǒng)中的其他模塊,應(yīng)該讓模塊僅僅公開(kāi)必須讓外界知道的內(nèi)容,而隱藏其他一切內(nèi)容。三、繼承1繼承的概念是用于描述對(duì)象類(lèi)之間一種相關(guān)的關(guān)系。例如:說(shuō)明:汽車(chē)稱(chēng)作是大卡車(chē)的父類(lèi)或基類(lèi),大卡車(chē)稱(chēng)為是汽車(chē)的子類(lèi)或派生類(lèi)。繼承是面向?qū)ο笳Z(yǔ)言的另一特性。類(lèi)與類(lèi)之間可以組成繼承層次,一個(gè)類(lèi)的定義(子類(lèi))可以定義在另一個(gè)已定義類(lèi)(父類(lèi))的基礎(chǔ)上。子類(lèi)可以繼承父類(lèi)中的屬性和操作,也可以定義自己的屬性和操作。2繼承的意義(1
9、)避免公共代碼的重復(fù)開(kāi)發(fā),減少代碼和數(shù)據(jù)的冗余;(2)通過(guò)增強(qiáng)一致性來(lái)減少模塊間的接口和界面。繼承的最大意義在于:重復(fù)使用的特性。四、多態(tài)性(p40)1多態(tài)性的概念是指不同的對(duì)象收到相同消息時(shí)產(chǎn)生多種不同的行為方式。2多態(tài)性的意義增強(qiáng)了軟件的靈活性和重用性,同時(shí)為軟件的開(kāi)發(fā)與維護(hù)提供了極大的便利。多態(tài)性又分為:靜態(tài)多態(tài)性(如函數(shù)的重載)和動(dòng)態(tài)多態(tài)性C+支持兩種多態(tài)性:編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性通過(guò)重載函數(shù)實(shí)現(xiàn),而運(yùn)行時(shí)的多態(tài)性通過(guò)虛函數(shù)實(shí)現(xiàn)。213 面向?qū)ο蟮某绦蛟O(shè)計(jì)的特點(diǎn)(p40)傳統(tǒng)的程序設(shè)計(jì)是把程序看成是處理數(shù)據(jù)的一系列過(guò)程。過(guò)程或函數(shù)定義為一個(gè)接一個(gè)順序執(zhí)行的一組指
10、令。數(shù)據(jù)與程序分開(kāi)存儲(chǔ)。編程的主要技巧在于追蹤哪些函數(shù)調(diào)用哪些函數(shù),哪些數(shù)據(jù)發(fā)生了變化。然而當(dāng)數(shù)據(jù)項(xiàng)和數(shù)據(jù)處理能力需求增強(qiáng)時(shí),這種將數(shù)據(jù)與處理這些數(shù)據(jù)的方法的分離就使得程序變的越來(lái)越難以理解。所謂面向?qū)ο蟮姆椒ǎ簩?shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存、不可分離的整體-對(duì)象。對(duì)同類(lèi)型對(duì)象抽象出其共性形成類(lèi)。類(lèi)中的大多數(shù)數(shù)據(jù)只能由本類(lèi)的方法進(jìn)行處理。類(lèi)通過(guò)一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過(guò)消息進(jìn)行通信。面向?qū)ο蟪绦蛟O(shè)計(jì)是在吸取結(jié)構(gòu)化程序設(shè)計(jì)的一切優(yōu)點(diǎn)的基礎(chǔ)上發(fā)展起來(lái)的一種新的程序設(shè)計(jì)方法。它的本質(zhì)是把數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程當(dāng)成一個(gè)整體對(duì)象。經(jīng)典公式:程序=(算法 )+(
11、程序結(jié)構(gòu))即算法是一個(gè)獨(dú)立的整體,數(shù)據(jù)結(jié)構(gòu)(包含數(shù)類(lèi)型與數(shù)據(jù))也是一個(gè)獨(dú)立的整體,兩者分開(kāi)設(shè)計(jì),以算法為主。在面向?qū)ο笾校惴ㄅc數(shù)據(jù)結(jié)構(gòu)被捆綁成一個(gè)類(lèi)。由于現(xiàn)實(shí)世界本身就是一個(gè)對(duì)象的世界,任何對(duì)象都具有一定的屬性與操作,也就總能用數(shù)據(jù)結(jié)構(gòu)與算法兩者合一地來(lái)描述,此時(shí),程序就被看成是:對(duì)象=(算法+程序結(jié)構(gòu))程序=(對(duì)象+對(duì)象+。)+消息214 面向?qū)ο蟮能浖_(kāi)發(fā)過(guò)程(p4243)一、系統(tǒng)調(diào)查和需求分析對(duì)系統(tǒng)要實(shí)現(xiàn)的功能及用戶對(duì)系統(tǒng)開(kāi)發(fā)的需求進(jìn)行調(diào)查研究。二、面向?qū)ο蠓治觯∣OA)在繁雜的問(wèn)題域中抽象地識(shí)別出對(duì)象及其行為、結(jié)構(gòu)、屬性、方法等。三、面向?qū)ο笤O(shè)計(jì)(OOD)對(duì)分析的結(jié)果作進(jìn)一步的抽象、
12、歸類(lèi)、整理,最終以規(guī)范的形式描述對(duì)象和類(lèi)。四、面向?qū)ο缶幊蹋∣OP)用面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言將上一步整理的對(duì)象和類(lèi)的描述映射為應(yīng)用程序軟件。五、面向?qū)ο鬁y(cè)試(OOT)六、面向?qū)ο缶S護(hù)(OOSM)2.2 類(lèi)的聲明和對(duì)象的定義一、類(lèi)和對(duì)象的關(guān)系(P44)類(lèi)和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系,類(lèi)是多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,一個(gè)對(duì)象是類(lèi)的一個(gè)實(shí)例。實(shí)際上,類(lèi)也是一種類(lèi)型,這種類(lèi)型是自定義的,其中包含有數(shù)據(jù)結(jié)構(gòu)和操作(方法)兩部分,而對(duì)象是某個(gè)類(lèi)的一個(gè)變量(即實(shí)例)。類(lèi)是抽象的,不占用內(nèi)存,而對(duì)象是具體的 ,占用內(nèi)存。二、聲明類(lèi)類(lèi)型1、從結(jié)構(gòu)到類(lèi)struct Student int num;char
13、name20;char sex;struct Student stu1,stu2; /定義兩個(gè)結(jié)構(gòu)體變量*class Student int num;char name20;char sex;void input( ) /成員函數(shù) cout<<”please input:”; cin>>num>>name>>sex; void display( ) /成員函數(shù) cout<<”num=”<<num<<endl;cout<<”name=”<<name<<endl;cout<
14、<”sex=”<<sex<<endl; ;class Student stu1,stu2; /定義兩個(gè)student類(lèi)的對(duì)象stu1,stu2;2類(lèi)類(lèi)型聲明的一般格式class 類(lèi)名 private:私有數(shù)據(jù)成員和私有成員函數(shù)public :公有數(shù)據(jù)成員和公有成員函數(shù); 例如:class Student private:int num;char name20;char sex;public :void input( ) /成員函數(shù) cout<<”please input:”; cin>>num>>name>>sex;
15、 void display( ) /成員函數(shù) cout<<”num=”<<num<<endl;cout<<”name=”<<name<<endl;cout<<”sex=”<<sex<<endl; ;class Student stu1,stu2; /定義兩個(gè)student類(lèi)的對(duì)象stu1,stu2;其中:class是定義類(lèi)的關(guān)鍵字,類(lèi)名是一種標(biāo)識(shí)符(與變量的命名規(guī)則相同);花括號(hào)內(nèi)是類(lèi)的說(shuō)明部分,稱(chēng)為類(lèi)體。包括數(shù)據(jù)成員和成員函數(shù),從訪問(wèn)權(quán)限上分為以下三種:aprivate(私有的)私有成
16、員只能由本類(lèi)的成員函數(shù)訪問(wèn)或友員函數(shù)可以引用他,在程序中不可訪問(wèn)是被隱藏的數(shù)據(jù),通常將一些數(shù)據(jù)成員定義為私有的;bpublic(公有的)公有成員可以由程序中的函數(shù)(包括類(lèi)內(nèi)和類(lèi)外)訪問(wèn)。公有成員提供了類(lèi)的接口功能,使用戶通過(guò)這些成員函數(shù)來(lái)調(diào)用私有數(shù)據(jù),通常將類(lèi)中的全部或部分成員函數(shù)定義為公有成員。cprotected(保護(hù)的)保護(hù)成員在不同的條件下,他具有公有成員和私有成員的特性(將在繼承性一章詳細(xì)講述)3說(shuō)明一般情況下,一個(gè)類(lèi)的數(shù)據(jù)成員應(yīng)該聲明為私有成員,成員函數(shù)聲明為公有成員;類(lèi)聲明中的private、public、protected三個(gè)關(guān)鍵字可以按任意順序出現(xiàn)任意次;若私有部分處于類(lèi)體中
17、第一部分,則關(guān)鍵字private可以省略;不能在類(lèi)聲明中給數(shù)據(jù)成員賦初值。三、 定義對(duì)象的方法(P46)1先聲明類(lèi)類(lèi)型,再定義對(duì)象一般格式:class 類(lèi)名 對(duì)象名;或: 類(lèi)名 對(duì)象名;例如: class Student stu1,stu2;或: Student stu1,stu2;2在聲明類(lèi)類(lèi)型的同時(shí)定義對(duì)象class Student private:。public : 。 stu1,stu2 ;3不出現(xiàn)類(lèi)名,直接定義對(duì)象class /無(wú)類(lèi)名 private:。public : 。 stu1,stu2 ;注:不提倡使用四、類(lèi)和結(jié)構(gòu)體的異同(P48)C+允許用struct定義類(lèi),區(qū)別在于:用s
18、truct聲明的類(lèi),如果對(duì)成員不作顯示的private或public聲明,系統(tǒng)將其成員默認(rèn)為public(公用的);而用class聲明的類(lèi),如果對(duì)成員不作顯示的private或public聲明,系統(tǒng)將其成員默認(rèn)為private(私有的)。注:不提倡使用struct定義類(lèi)。2.3 類(lèi)的成員函數(shù)一、成員函數(shù)的性質(zhì)(P49)一個(gè)類(lèi)中定義的函數(shù),即稱(chēng)為:成員函數(shù)。一個(gè)類(lèi)中的成員函數(shù)可以訪問(wèn)本類(lèi)中的所有成員(無(wú)論是私有的還是公用的),而一個(gè)類(lèi)中只有公用函數(shù)可以在類(lèi)外進(jìn)行調(diào)用。二、在類(lèi)外定義成員函數(shù)在類(lèi)聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫(xiě)在類(lèi)的外面。一般形式:返回類(lèi)型 類(lèi)名:成員函數(shù)名(參數(shù)表) /
19、函數(shù)體例如:class Student private:int num;char name20;char sex;public :void input( ); /成員函數(shù)原型聲明void display( ) ; /成員函數(shù)原型聲明;void Student:input( ) /成員函數(shù)在類(lèi)外進(jìn)行定義 cout<<”please input:”; cin>>num>>name>>sex; void Student:display( ) /成員函數(shù)在類(lèi)外進(jìn)行定義 cout<<”num=”<<num<<endl;c
20、out<<”name=”<<name<<endl;cout<<”sex=”<<sex<<endl; 說(shuō)明:1如果在類(lèi)聲明體外聲明成員函數(shù)時(shí),需要在成員函數(shù)名之前綴上類(lèi)名(“:”作用域運(yùn)算符),用于表明成員函數(shù)所屬的類(lèi);.2類(lèi)外定義成員函數(shù),有助于提高可讀性、結(jié)構(gòu)的清晰度。三、inline成員函數(shù)1隱式聲明(直接將函數(shù)聲明在類(lèi)內(nèi)部)例如:class Person public:void init(int i,char *str) age=i;strcpy(name,str); void display( ) cout<
21、<name<<” is “<<age<<” years old .”<<endl; private: int age; char name10; ;2顯式聲明(在類(lèi)聲明中只給出成員函數(shù)的原型,而成員函數(shù)體寫(xiě)在類(lèi)的外部)。一般形式:inline 返回類(lèi)型 類(lèi)名:成員函數(shù)名(參數(shù)表) /函數(shù)體例如:class Person public:void init(int i,char *str);void display( ); private: int age; char name10;inline void Person:init(int i,c
22、har *str) age=i; strcpy(name,str); inline void Person:display( ) cout<<name<<” is “<<age<<” years old .”<<endl; ;說(shuō)明:使用inline說(shuō)明內(nèi)聯(lián)函數(shù)時(shí),必須使函數(shù)體和inline說(shuō)明結(jié)合在一起,否則編譯器將他作為普通函數(shù)處理。例如:inline void person init(int i,char *str)通常只有較短的成員函數(shù)才定義為內(nèi)聯(lián)函數(shù)。四、成員函數(shù)的存儲(chǔ)方式(P52)一個(gè)類(lèi)所定義的每一個(gè)對(duì)象,系統(tǒng)都要為其分配相
23、應(yīng)的存儲(chǔ)空間,而該存儲(chǔ)空間僅用來(lái)存儲(chǔ)對(duì)象的數(shù)據(jù)成員。一個(gè)類(lèi)無(wú)論定義多少個(gè)對(duì)象,它們都用一段存儲(chǔ)空間以存放公用的成員函數(shù)代碼。不同的對(duì)象使用各自不同的數(shù)據(jù)調(diào)用同一段成員函數(shù)代碼進(jìn)行執(zhí)行,將會(huì)得到不同的結(jié)果。2.4對(duì)象成員的引用(三種方式)一、通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員訪問(wèn)的一般形式: 對(duì)象名數(shù)據(jù)成員名或 對(duì)象名成員函數(shù)名(參數(shù)表)其中“ ”稱(chēng)為對(duì)象選擇符(或稱(chēng)成員運(yùn)算符),簡(jiǎn)稱(chēng)點(diǎn)運(yùn)算符。例21 使用類(lèi)person的完整程序。#include<iostream>using namespace std;class Person /類(lèi)定義 public:void init(in
24、t i,char *str) / 定義成員函數(shù) age=i;strcpy(name,str); void display( ) / 定義成員函數(shù)cout<<name<<” is “<<age<<” years old .”<<endl; private: int age; char name10;int main() Person A; /定義對(duì)象A char na10; int ag; cout<<”請(qǐng)輸入姓名:“; cin>>ag; Ainit(ag,na); /訪問(wèn)A對(duì)象成員函數(shù)init(ag,na) A
25、display( ); /訪問(wèn)A對(duì)象成員函數(shù)display( ); return 0;例22 一個(gè)存在錯(cuò)誤的程序#include<iostream>using namespace std;class Date public : void setdate(int y,int m,int d); /公有成員函數(shù)(原型)void showdate();private: int year; /私有數(shù)據(jù)成員 int month; int day;void Date:setdate(int y,int m,int d) year=y;month=m; day=d;inline void dat
26、e: showdate() cout<<year<<”.”<<month<<”.”<<day<<endl; int main() Date date1,date2; cout<<”date1 set and output:”<<endl; date1.setdate(1998,4,28); cout<<date1.year<<”.”<< date1. month <<”.”<< date1. day<<endl; /error,
27、訪問(wèn)私有數(shù)據(jù) 可改為:date1.showdate();ok ,調(diào)用公有成員函數(shù)cout<<”date2 set and output:”<<endl; date2.setdate(2002,11,14);cout<<date2.year<<”.”<<date2.month<<”.”<< date2. day<<endl; /error,訪問(wèn)私有數(shù)據(jù),可改為:date2.showdate();ok ,調(diào)用公有成員函數(shù) return 0;例23使用類(lèi)Data的正確程序#include<iostr
28、eam>using namespace std;class date public : void setdate(int y,int m,int d); /公有成員函數(shù)(原型)void showdate();private: int year; /私有數(shù)據(jù)成員 int month; int day;void date:setdate(int y,int m,int d) year=y;month=m; day=d; inline void date: showdate() cout<<year<<”.”<<month<<”.”<<
29、;day<<endl; int main() date date1,date2; cout<<”date1 set and output:”<<endl; date1.setdate(1998,4,28); date1.showdate(); /ok ,調(diào)用公有成員函數(shù)cout<<”date2 set and output:”<<endl; date2.setdate(2002,11,14); date2.showdate(); /ok ,調(diào)用公有成員函數(shù) return 0;問(wèn)題:將例22類(lèi)中的數(shù)據(jù)成員定義為公有成員,程序是否可以運(yùn)行
30、?說(shuō)明:類(lèi)的內(nèi)部所有成員之間都可以通過(guò)成員函數(shù)直接訪問(wèn),但在類(lèi)的外部不能訪問(wèn)對(duì)象的私有成員;二、通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員(P55)如果定義的是指向某對(duì)象的指針,則訪問(wèn)此對(duì)象的成員時(shí),應(yīng)使用“->“操作符例如:Date date3, *p;p=&date3p->setDate(2001,8,15)三、通過(guò)對(duì)象的引用訪問(wèn)對(duì)象中的成員如果為一個(gè)對(duì)象定義了一個(gè)引用,則它們共占用同一段存儲(chǔ)單元。例如:Date date3, &detew=date3;datew.setDate(2007,3,15); /等價(jià)于 date3.setDate(2007,3,15);2.5
31、 類(lèi)和對(duì)象的簡(jiǎn)單應(yīng)用舉例 例2.4 (P55例2.1)#include <iostream>using namespace std;class Time public: int hour; int minute; int sec; ;int main() Time t1; cin>>t1.hour; cin>>t1.minute; cin>>t1.sec; cout<<t1.hour<<":"<<t1.minute<<":"<<t2.sec<
32、<endl; return 0;例2.5 (P56例2.2(a)引用多個(gè)對(duì)象成員#include <iostream>using namespace std;class Time public: int hour; int minute; int sec;int main() Time t1; cin>>t1.hour; cin>>t1.minute; cin>>t1.sec; cout<<t1.hour<<":"<<t1.minute<<":"<
33、<t1.sec<<endl; Time t2; cin>>t2.hour; cin>>t2.minute; cin>>t2.sec; cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl; return 0; 例2.6(P57例2.2(b)利用函數(shù)簡(jiǎn)化對(duì)象對(duì)對(duì)象成員的訪問(wèn)#include <iostream>using namespace std;class Time /類(lèi)定
34、義 public: int hour; int minute; int sec;int main() void set_time(Time&) ; /函數(shù)原型聲明 void show_time(Time&); /函數(shù)原型聲明 Time t1; /定義對(duì)象t1 set_time(t1); /對(duì)象作為函數(shù)的參數(shù)傳遞 show_time(t1); Time t2; set_time(t2); show_time(t2); return 0; void set_time(Time& t) cin>>t.hour; cin>>t.minute; cin&g
35、t;>t.sec; void show_time(Time& t) cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; 例2.7(P58例2.2(c)利用帶有默認(rèn)參數(shù)值的函數(shù)簡(jiǎn)化對(duì)象對(duì)對(duì)象成員的訪問(wèn)#include <iostream>using namespace std;class Time public: int hour; int minute; int sec; ;int main() void set_t
36、ime(Time&,int hour=0,int minute=0,int sec=0); void show_time(Time&); /函數(shù)原型聲明 Time t1; set_time(t1,12,23,34); show_time(t1); Time t2; set_time(t2); show_time(t2); return 0; void set_time(Time& t,int hour=9,int minute=30,int sec=0) t.hour=hour; t.minute=minute; t.sec=sec; void show_time(Ti
37、me& t) cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; 例2.8(P60例2.3)利用帶有成員函數(shù)的類(lèi)進(jìn)行處理#include <iostream>using namespace std;class Timepublic: void set_time() ; void show_time(); private: int hour; int minute; int sec; ;int main() Time t1;
38、 t1.set_time(); t1.show_time(); Time t2; t2.set_time(); t2.show_time(); return 0; void Time:set_time() cin>>hour; cin>>minute; cin>>sec; void Time:show_time()cout<<hour<<":"<<minute<<":"<<sec<<endl; 例2.9(P61例2.4)找出一個(gè)整型數(shù)組中的元素的最
39、大值#include <iostream>using namespace std;class Array_maxpublic: void set_value(); void max_value(); void show_value(); private: int array10; int max;void Array_max:set_value() int i; for (i=0;i<10;i+) cin>>arrayi; void Array_max:max_value() int i; max=array0; for (i=1;i<10;i+) if(a
40、rrayi>max) max=arrayi; void Array_max:show_value() cout<<"max="<<max; int main() Array_max amax; amax.set_value(); amax.max_value(); amax.show_value(); return 0;2.6 類(lèi)的封裝性和隱蔽性(p62)一、公用接口與私有實(shí)現(xiàn)的分離 類(lèi)的封裝是指將數(shù)據(jù)和對(duì)數(shù)據(jù)的有關(guān)操作封裝在一個(gè)類(lèi)中。通常,所有的數(shù)據(jù)定義為私有的,而需要外界調(diào)用的成員函數(shù)定義為公用的,外界對(duì)私有數(shù)據(jù)的操作是通過(guò)對(duì)公用成員函數(shù)的
41、調(diào)用來(lái)實(shí)現(xiàn)。1類(lèi)的公用接口(對(duì)外接口)類(lèi)的公用接口是指類(lèi)的公用部分,通常指類(lèi)的公用成員函數(shù)。2私有實(shí)現(xiàn)通過(guò)類(lèi)的公用成員函數(shù)對(duì)類(lèi)的私有數(shù)據(jù)的操作稱(chēng)為私有實(shí)現(xiàn)。3接口與實(shí)現(xiàn)分離的意義(1)便于對(duì)類(lèi)的功能維護(hù)當(dāng)類(lèi)的功能需要修改或擴(kuò)充時(shí),只需修改類(lèi)中的有關(guān)數(shù)據(jù)成員或成員函數(shù),而無(wú)須對(duì)類(lèi)外的程序進(jìn)行變動(dòng)。即,對(duì)用戶而言,類(lèi)的實(shí)現(xiàn)方法的改變并不影響用戶,只要接口不變即可。(2)便于對(duì)程序的調(diào)試。二、類(lèi)聲明和成員函數(shù)定義的分離將類(lèi)聲明和成員函數(shù)定義分別建立在不同的文件中,有助于提高編程的效率。1C+源程序的基本框架在實(shí)際程序設(shè)計(jì)中,一個(gè)c+源程序的結(jié)構(gòu)可由三個(gè)文件構(gòu)成:類(lèi)聲明文件(*.h)、類(lèi)實(shí)現(xiàn)文件(*.
42、cpp)和類(lèi)的使用文件(*.cpp,主函數(shù)文件)將類(lèi)的聲明部分放在類(lèi)聲明文件(頭文件)中,即形成了類(lèi)的公用接口,向用戶提供調(diào)用類(lèi)的成員函數(shù)所需的函數(shù)原型。將類(lèi)的成員函數(shù)的定義放在類(lèi)的實(shí)現(xiàn)文件中,就形成了類(lèi)的實(shí)現(xiàn)方法。將類(lèi)的使用部分(通常是主程序)放在類(lèi)使用文件中,可清晰地表明程序所要完成的工作。例如: (p64)/student.h 類(lèi)的聲明部分#include <string> using namespace std; class Student /類(lèi)定義 public: void display( ); /公用成員函數(shù)原型聲明 private: int num; string name; char sex ;/student.cpp 類(lèi)的實(shí)現(xiàn)部分#inclu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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至2030年單圓頭單板壓痕線項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年二羥基三萘鉀酰胺項(xiàng)目投資價(jià)值分析報(bào)告
- 房產(chǎn)權(quán)益轉(zhuǎn)讓合同
- 房屋代理銷(xiāo)售協(xié)議書(shū)
- 個(gè)人臨時(shí)用車(chē)租車(chē)協(xié)議書(shū)范本
- 特許連鎖經(jīng)營(yíng)協(xié)議書(shū)范本
- 預(yù)包裝食品合同范本
- 房屋委托出租管理合同范本
- 汽車(chē)以租代售合同范本
- 外企勞動(dòng)合同范本
- 醫(yī)院食堂計(jì)劃方案
- 保衛(wèi)管理員三級(jí)培訓(xùn)
- 2024年十八項(xiàng)醫(yī)療核心制度考試試題及答案
- 七年級(jí)數(shù)學(xué)(上)有理數(shù)混合運(yùn)算100題(含答案)
- 輔導(dǎo)員素質(zhì)能力大賽基礎(chǔ)知識(shí)試題題庫(kù)
- 《初三畢業(yè)班開(kāi)學(xué)第一課:收心及中考沖刺》班會(huì)課件
- 2024年山東司法警官職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 新生兒轉(zhuǎn)運(yùn)護(hù)理安全管理課件
- 華為公司煤礦智能化遠(yuǎn)景培訓(xùn)課件2024
- 醫(yī)院智慧病房信息化建設(shè)
- 中考語(yǔ)文一輪專(zhuān)題復(fù)習(xí):《現(xiàn)代文閱讀的命題特點(diǎn)及教學(xué)策略》課件
評(píng)論
0/150
提交評(píng)論