C++第8章類和對(duì)象_第1頁(yè)
C++第8章類和對(duì)象_第2頁(yè)
C++第8章類和對(duì)象_第3頁(yè)
C++第8章類和對(duì)象_第4頁(yè)
C++第8章類和對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章類和對(duì)象從簡(jiǎn)單到復(fù)雜人類發(fā)展史,是一部從簡(jiǎn)單到復(fù)雜,從容易到困難的探索歷史以交通工具的生產(chǎn)制作為例說(shuō)明。任何一個(gè)合格的木匠都能獨(dú)立制作一輛馬車。復(fù)雜的交通工具再優(yōu)秀的工程師都無(wú)法獨(dú)立生產(chǎn)一輛汽車甚至一輛自行車。那該怎么辦呢?采用面向?qū)ο蟮脑O(shè)計(jì)思想對(duì)問(wèn)題的表述從簡(jiǎn)到繁單個(gè)變量:反映無(wú)關(guān)聯(lián)的屬性

inta,b,c;變量的集合數(shù)組:反映同類型相關(guān)屬性inta[10],b[20];結(jié)構(gòu)體:反映相關(guān)屬性,可以描述較復(fù)雜的事物的屬性(不同類型)Structstudent{

intid;charname[20];

floatscore[5];};問(wèn)題一:對(duì)變量的操作是另外定義的,與變量定義分離。問(wèn)題二:對(duì)于復(fù)雜系統(tǒng)的描述,將有大量屬性數(shù)據(jù)及其相關(guān)操作,數(shù)據(jù)與操作之間的對(duì)應(yīng)關(guān)系也十分復(fù)雜屬性與操作的集合--在一個(gè)類型中定義屬性,同時(shí)定義與這些屬性相關(guān)的操作問(wèn)題三:對(duì)客觀世界的描述,總是屬性(數(shù)據(jù))與性能(動(dòng)作)相聯(lián)系的,在計(jì)算機(jī)內(nèi)部如何表達(dá)?類“時(shí)鐘”類的定義classClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) { hour=h;minute=m;second=s; }

voidGettime(int&h,int&m,int&s) { h=hour;m=minute;s=second; }};從外界對(duì)時(shí)鐘設(shè)置時(shí)間,比如鐘表背面的設(shè)置按鈕外界獲取時(shí)鐘的時(shí)間,比如鐘表正面的表盤(pán)8.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述對(duì)象對(duì)象的兩個(gè)要素:靜態(tài)特征:屬性;考慮汽車有哪些屬性?動(dòng)態(tài)特征:行為;考慮汽車有哪些行為?一個(gè)系統(tǒng)的多個(gè)對(duì)象之間通過(guò)消息相互聯(lián)系??紤]行駛到路口的汽車考到紅燈這個(gè)信號(hào)(消息)時(shí)會(huì)產(chǎn)生什么樣的行為?注意:汽車是一個(gè)大的對(duì)象,它是由許多更小的對(duì)象組成的,如,發(fā)動(dòng)機(jī)、地盤(pán)、輪子等。封裝與信息隱蔽考慮一臺(tái)電視機(jī),它里面的結(jié)構(gòu)和工作原理我們知道嗎?對(duì)普通的人來(lái)說(shuō),需要知道嗎?封裝的含義:將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)基本的單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接受外界的消息。電視機(jī)的接口抽象什么是汽車?把具有輪子,能滾動(dòng)前進(jìn)的陸地交通工具統(tǒng)稱為“車子”。再進(jìn)一步,把用汽油發(fā)動(dòng)機(jī)驅(qū)動(dòng)的車子抽象為“汽車”,把用馬拉的車子抽象為“馬車”,用腳蹬的車子抽象為腳踏車。具有某些相同的屬性和行為類與對(duì)象:類是對(duì)象的抽象,對(duì)象是類的特例,是類的具體表現(xiàn)形式。人小李小周…抽象的概念具體的人繼承與重用現(xiàn)代工業(yè)高效的重要原因:重用性,一件工業(yè)產(chǎn)品的生產(chǎn)通常都不是從零開(kāi)始的,總是盡可能利用前有的成果。那么軟件產(chǎn)品呢,是不是也可以實(shí)現(xiàn)重用?怎么實(shí)現(xiàn)呢?重用要通過(guò)繼承機(jī)制來(lái)實(shí)現(xiàn)。繼承車子馬車汽車腳踏車多態(tài)性考慮,停在路口的汽車和馬車,當(dāng)看到左轉(zhuǎn)向的信號(hào)燈由紅燈變?yōu)榫G燈時(shí),分別拐向機(jī)動(dòng)車道和非機(jī)動(dòng)車道。多態(tài)性:由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。8.1.2面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向過(guò)程程序設(shè)計(jì):圍繞功能,面向函數(shù);面向?qū)ο蟪绦蛟O(shè)計(jì):圍繞對(duì)象的設(shè)計(jì),面向?qū)ο?;面向?qū)ο蟪绦蛟O(shè)計(jì),程序設(shè)計(jì)者的任務(wù):設(shè)計(jì)所需的各種類和對(duì)象,即決定把哪些數(shù)據(jù)和操作封裝在一起;考慮怎樣向有關(guān)對(duì)象發(fā)送消息,以完成所需的任務(wù)。8.1.3類和對(duì)象的作用基于對(duì)象:Object-Based,以類和對(duì)象為基礎(chǔ),程序的操作時(shí)圍繞對(duì)象進(jìn)行的。面向?qū)ο螅篛bject-Oriented,在基于對(duì)象的基礎(chǔ)上,利用繼承機(jī)制和多態(tài)性,實(shí)現(xiàn)重用性。類是所有面向?qū)ο蟮恼Z(yǔ)言的共同特征,所有面向?qū)ο蟮恼Z(yǔ)言都提供了這種類型一個(gè)有一定規(guī)模的C++程序是由許多類所構(gòu)成的一個(gè)有一定規(guī)模的C++程序在執(zhí)行時(shí)表現(xiàn)為許多相關(guān)的對(duì)象相互之間的作用8.2類的聲明和對(duì)象的定義8.2.1類和對(duì)象的關(guān)系類與對(duì)象的關(guān)系如同結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的關(guān)系。具體來(lái)說(shuō),就是:類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。人小李小周…抽象的概念具體的人8.2.2聲明類類型類聲明方法及例子如下:classClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) { hour=h;minute=m;second=s; }

voidGettime(int&h,int&m,int&s) { h=hour;m=minute;s=second; }};在類里包含了數(shù)據(jù)成員和操作數(shù)據(jù)成員的成員函數(shù),實(shí)現(xiàn)了把數(shù)據(jù)和操作封裝在一起。成員訪問(wèn)限定符,如不指定,則默認(rèn)為private類類型的聲明,一般形式如下:

class

類名{

private:私有的數(shù)據(jù)和成員函數(shù);

public:公用的數(shù)據(jù)和成員函數(shù);

protected: 保護(hù)的數(shù)據(jù)和成員函數(shù);};

inthour;intminute;intsecond;DoorSettimeGettimehour,minute,secondprivatememberhourminutesecond成員訪問(wèn)限定符public:既可以被本類中的成員函數(shù)訪問(wèn),也可以被類的作用域內(nèi)的其他函數(shù)訪問(wèn)。private:只能被本類中的成員函數(shù)訪問(wèn),在類外(友元類例外,第9章)不能被訪問(wèn)。(注意理解類外的含義)protected:不能被類外訪問(wèn),但可以被派生類的成員函數(shù)訪問(wèn)。成員訪問(wèn)限定符的聲明次序是任意的。請(qǐng)分析以下例子中各成員的訪問(wèn)屬性。classClock{private:

inthour;

intminute;

intsecond;…};classClock{

inthour;private:

intminute;

intsecond;…};classClock{

inthour;public:

intminute;

intsecond;…};classClock{private:inthour;intminute;public:intsecond;…};classClock{public:

inthour;private:

intminute;public:

intsecond;…};classClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) {hour=h;minute=m;second=s;}

voidGettime(int&h,int&m,int&s) {h=hour;m=minute;s=second;}};私有成員,只有類內(nèi)部定義的函數(shù)可以訪問(wèn)。公有成員,類內(nèi)部、外部定義的函數(shù)都可以調(diào)用。注意理解“類外”的含義voidmain(){ Clockck;

inth,m,s; ck.Settime(8,15,23);//ck.hour=8;有語(yǔ)法錯(cuò)誤嗎? ck.Gettime(h,m,s); cout<<"Time:"<<h<<":"<<m<<":"<<s<<endl;}main()相對(duì)于Clock類是“外部”的,不能直接訪問(wèn)Clock內(nèi)的私有成員,但可以通過(guò)調(diào)用Clock定義的公有函數(shù),實(shí)現(xiàn)對(duì)Clock私有成員的設(shè)置與數(shù)據(jù)獲取。理解“類的作用域”voidmain(){ClockCk1;//undeclaredidentifierCk1.Settime(8,12,56);}classClock{private: …public: …};//clock.hclassClock{private: …public: …};//main.cpp#include“clock.h”voidmain(){ClockCk1;//undeclaredidentifierCk1.Settime(8,12,56);}要把頭文件clock.h包含進(jìn)來(lái)Clock類的聲明必須出現(xiàn)在使用之前理解類內(nèi)部的作用域類是一個(gè)自成一體的“小世界”,其中的標(biāo)識(shí)符(包括數(shù)據(jù)成員和成員函數(shù))作用范圍是類內(nèi)部:類中的成員可以訪問(wèn)同一類的其它成員;類內(nèi)部成員函數(shù)中定義的局部變量可以屏蔽同名的數(shù)據(jù)成員;classA{private:

intx,y;public:

voidf() {

intx;...//A::x被屏蔽 }};8.2.3定義對(duì)象的方法與使用結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量類似//方法一classClock{private: …public: …};classClockCk1,Ck2;//方法二classClock{private: …public: …}Ck1,Ck2;//方法三class{private: …public: …}Ck1,Ck2;關(guān)于對(duì)象數(shù)據(jù)成員的初始化注意:與結(jié)構(gòu)體變量初始化不同的是不能在定義對(duì)象時(shí)對(duì)對(duì)象的私有數(shù)據(jù)成員用直接賦值的形式進(jìn)行初始化。對(duì)對(duì)象的私有成員的初始化要使用構(gòu)造函數(shù)(第9章)來(lái)實(shí)現(xiàn)。classClock{private: …public: …};classClock=(10,8,24);//錯(cuò)誤使用對(duì)象(及其成員)使用對(duì)象的成員(包括數(shù)據(jù)成員和成員函數(shù))方法,使用成員運(yùn)算符:對(duì)象.成員Clockck1,ck2;ck1.Settime(9,23,42);inthh,mm,ss;ck1.Gettime(hh,mm,ss);給對(duì)象ck1中的私有數(shù)據(jù)成員hour,minute,second賦值獲取對(duì)象ck1中的私有數(shù)據(jù)成員hour,minute,second的數(shù)據(jù)通過(guò)調(diào)用類的公有成員函數(shù)訪問(wèn)類中的私有成員。函數(shù)參數(shù)傳遞使用哪種方式?8.2.4類和結(jié)構(gòu)體類型的異同在C++里,從功能上說(shuō),類類型和結(jié)構(gòu)體類型完全一樣(在結(jié)構(gòu)體里也可以定義函數(shù)),在C++保留結(jié)構(gòu)僅僅是為了與C語(yǔ)言兼容。用struct聲明的類和用class聲明的類的區(qū)別:用struct聲明的類,其成員訪問(wèn)屬性默認(rèn)為public,用class聲明的類,其成員訪問(wèn)屬性默認(rèn)為private。一般來(lái)說(shuō),對(duì)簡(jiǎn)單的類(不包含成員函數(shù)),用struct來(lái)定義,反之,用class來(lái)定義。//沒(méi)有對(duì)成員的訪問(wèn)屬性//做顯式聲明,默認(rèn)為publicstructStudent{intnum;

charname[20];charsex;

voiddisplay(){cout<<num<<endl;cout<<name<<endl;cout<<sex<<endl;}}//沒(méi)有對(duì)成員的訪問(wèn)屬性//做顯式聲明,默認(rèn)為privateclassStudent{intnum;

charname[20];

charsex;

voiddisplay(){cout<<num<<endl;cout<<name<<endl;cout<<sex<<endl;}}8.3類的成員函數(shù)8.3.1成員函數(shù)的性質(zhì)接口函數(shù):需要被外界調(diào)用的成員函數(shù),必須設(shè)置為public;工具函數(shù):只被類中其他函數(shù)調(diào)用,不被外界調(diào)用,一般來(lái)說(shuō)應(yīng)該設(shè)置為private;接口函數(shù)與工具函數(shù)classClock{private:

inthour,minute,second; voidjudge(){

if(hour>23||hour<0)hour=0;

if(minute>59||minute<0)minute=0;

if(second>59||second<0)second=0; }public:

voidSettime(inth,intm,ints) {hour=h;minute=m;second=s;judge();}

voidGettime(int&h,int&m,int&s) {h=hour;m=minute;s=second;}};工具函數(shù),只被Settime()函數(shù)調(diào)用8.3.2在類外定義成員函數(shù)成員函數(shù)可以直接在類里定義,也可以先在類里聲明,然后在類外定義。classClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) {hour=h;minute=m;second=s;}

voidGettime(int&h,int&m,int&s);//聲明};void

Clock::Gettime(int&h,int&m,int&s)//定義{h=hour;m=minute;s=second;}作用域運(yùn)算符:優(yōu)先級(jí)最高作用域運(yùn)算符正確使用作用域運(yùn)算符:在類內(nèi)部聲明和定義成員函數(shù)時(shí)不需要加作用域運(yùn)算符;在類外部定義類的成員函數(shù)時(shí),需要加作用域運(yùn)算符;如果在外部定義函數(shù)時(shí)加了作用域運(yùn)算符::,但在前面沒(méi)有加類名,或者既無(wú)類名又無(wú)作用域運(yùn)算符,定義的都是普通的全局函數(shù),如:::display()或display()8.3.3inline成員函數(shù)P97內(nèi)置函數(shù)(inline函數(shù))提出原因:函數(shù)調(diào)用開(kāi)銷(保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng))比較大。適用范圍:代碼簡(jiǎn)單且頻繁調(diào)用的函數(shù)。(現(xiàn)在的編譯系統(tǒng)已經(jīng)能夠識(shí)別這類函數(shù)并自動(dòng)將函數(shù)設(shè)置為內(nèi)置函數(shù),并不取決與用戶是否將函數(shù)聲明為內(nèi)置。)實(shí)現(xiàn)方法:在編譯時(shí)直接將內(nèi)置函數(shù)的代碼嵌入到函數(shù)調(diào)用處。inta[1000],b[1000];…for(inti=1,sum=0;i<1000;i++) sum+=max(a[i],b[i]);intmax(inta,intb){

if(b>a)returnb;

else

returna;}類的成員函數(shù)的內(nèi)置處理出發(fā)點(diǎn):也是為了減小時(shí)間開(kāi)銷。處理方法:對(duì)于在類里面定義的成員函數(shù),默認(rèn)為內(nèi)置函數(shù),因此inline可以省略對(duì)于在類外面定義的成員函數(shù),并不默認(rèn)為inline函數(shù),必須顯式地說(shuō)明。inline

voidClock::Gettime(int&h,int&m,int&s){ h=hour;m=minute;s=second;}8.3.4成員函數(shù)的存儲(chǔ)方式聲明類之后,用類去定義對(duì)象,編譯系統(tǒng)要為對(duì)象分配存儲(chǔ)空間。分配方法一:每定義一個(gè)對(duì)象,分別為該對(duì)象的數(shù)據(jù)和函數(shù)代碼分配存儲(chǔ)空間。缺點(diǎn):浪費(fèi)存儲(chǔ)空間。(不采用)Ck1.Settime()Ck1.Gettime()Ck1.hourCk1.minuteCk1.secondCk2.Settime()Ck2.Gettime()Ck2.hourCk2.minuteCk2.second…Ck10.Settime()Ck10.Gettime()Ck10.hourCk10.minuteCk10.second注意到:同一個(gè)類的每個(gè)對(duì)象數(shù)據(jù)值不相同,但成員函數(shù)的代碼是完全一樣的。方法二:只用一段存儲(chǔ)空間來(lái)存儲(chǔ)同一個(gè)類不同對(duì)象的成員函數(shù)代碼,在調(diào)用各對(duì)象的函數(shù)時(shí),都去調(diào)用這個(gè)共用的函數(shù)代碼。對(duì)象的數(shù)據(jù)成員存儲(chǔ)在程序數(shù)據(jù)區(qū)對(duì)象的函數(shù)成員統(tǒng)一存儲(chǔ)在程序代碼區(qū)Settime()Gettime()Ck1.hourCk1.minuteCk1.secondCk2.hourCk2.minuteCk2.secondClockck1,ck2;//用sizeof()測(cè)試問(wèn)題:當(dāng)調(diào)用成員函數(shù)時(shí),成員函數(shù)怎么知道當(dāng)前操作的是哪個(gè)對(duì)象的數(shù)據(jù)?Clockck1,ck2;……Ck1.Settime(10,34,23);Ck2.Settime(23,12,54);Settime()Gettime()Ck1.hourCk1.minuteCk1.secondCk2.hourCk2.minuteCk2.second調(diào)用(10,34,23)調(diào)用(23,12,54)使用哪一套?需要有一個(gè)參數(shù)來(lái)表示當(dāng)前操作的是哪個(gè)對(duì)象this指針this指針(P281)在對(duì)象調(diào)用成員函數(shù)時(shí),除了傳遞函數(shù)參數(shù)外,還傳遞一個(gè)隱含的指針--this指針,指向?qū)ο蟊旧?。?dāng)調(diào)用ck1的成員函數(shù),this指針就指向ck1,當(dāng)調(diào)用ck2的成員函數(shù),this指針就指向ck2。在成員函數(shù)中,所有對(duì)數(shù)據(jù)成員的訪問(wèn)都會(huì)(隱含地)加上一個(gè)this指針:hour this->hourminutethis->minutesecondthis->secondclassClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) { this->hour=h; this->minute=m; this->second=s;}

voidGettime(int&h,int&m,int&s);//聲明};void

Clock::Gettime(int&h,int&m,int&s)//定義{h=hour;m=minute;s=second;}classClock{private:

inthour,minute,second;public:

voidSettime(inth,intm,ints) { hour=h; minute=m; second=s;}

voidGettime(int&h,int&m,int&s);//聲明};void

Clock::Gettime(int&h,int&m,int&s)//定義{h=hour;m=minute;s=second;}Settime()Ck1.hourCk1.minuteCk1.secondCk2.hourCk2.minuteCk2.second調(diào)用(10,34,23,this(ck2))調(diào)用(23,12,54,this(ck1))……Ck1.Settime(23,12,54);Ck2.Settime(10,34,23);8.4對(duì)象成員的引用通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員例如:stud1.num=1001;//假設(shè)num已定義為公用的整型數(shù)據(jù)成員例如:class

Time{public://數(shù)據(jù)成員是公用的

inthour;

intminute;};Timet,*p;//定義對(duì)象t和指針變量pp=&t;//使p指向?qū)ο髏cout<<p->hour;//輸出p指向的對(duì)象中的成員hour例如:class

Time{public://數(shù)據(jù)成員是公用的

inthour;

intminute;};Timet1;//定義對(duì)象t1Time&t2=t1;//定義Time類引用變量t2,并使之初始化為t1cout<<t2.hour;//輸出對(duì)象t1中的成員hour說(shuō)明:同一類型的對(duì)象可整體賦值,但使用要慎重(P291介紹對(duì)象拷貝)。intmain(){ClockCk1,Ck2;Ck1.Settime(8,12,20);Ck2=Ck1;//請(qǐng)慎重使用

inth,m,s;Ck2.Gettime(h,m,s);cout<<"hour:"<<h<<"minute:"<<m<<"second:"<<s<<endl;

return0;}8.5類的封裝性和信息隱蔽面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,封裝性和信息隱蔽的目的:為保證安全性,盡可能不讓類外的函數(shù)直接使用類的數(shù)據(jù)成員;為保密起見(jiàn),盡可能不公開(kāi)成員函數(shù)的代碼;為使用方便和減小開(kāi)銷,在使用類時(shí)只需加載盡可能少的文件,和避免重復(fù)加載。實(shí)現(xiàn)的原則:公用接口和私有實(shí)現(xiàn)的分離類聲明和成員函數(shù)定義的分離8.5.1公用接口與私有實(shí)現(xiàn)的分離一般把類的數(shù)據(jù)成員設(shè)置為私有,不允許外界直接訪問(wèn)數(shù)據(jù)成員,公用成員函數(shù)充當(dāng)使用類的公用接口。公用成員函數(shù)的代碼一般是不公開(kāi)的,其中實(shí)現(xiàn)的細(xì)節(jié)是隱蔽的,稱為私有實(shí)現(xiàn)。

inthour;intminute;intsecond;DoorSettimeGettimehour,minute,secondprivatememberhms8.5.2類聲明和成員函數(shù)定義的分離出發(fā)點(diǎn):把類的聲明和成員函數(shù)的實(shí)現(xiàn)分別放在不同的文件里。頭文件的處理:如果在程序中需要使用到該類,只要把頭文件包含進(jìn)來(lái)就可以了。實(shí)現(xiàn)文件的處理:編譯成目標(biāo)文件一次性加載進(jìn)來(lái)。//student.hstructStudent{public:

voiddisplay();private:

intnum;

charname[20];

charsex;}//student.cpp#include<iostream>#include"student.h“usingnamespacestd;voidStudent::display(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;}//main.cpp#include<iostream>#include"student.h"usingnamespacestd;voidmain(){Studentstud;stud.display();

return0;}使用類的接口文件包含預(yù)處理中,用尖括號(hào)(<>)和雙撇號(hào)(“”)的區(qū)別(P130):用尖括號(hào):編譯系統(tǒng)到系統(tǒng)目錄中尋找要包含的文件。系統(tǒng)目錄就是安裝C++系統(tǒng)的目錄。雙撇號(hào):編譯系統(tǒng)先到指定目錄中去找要包含的文件,如果沒(méi)有指定目錄,則在當(dāng)前目錄下找;如果找不到,再到系統(tǒng)目錄下去找。//main.cpp#include<iostream>#include<student.h>//錯(cuò)誤voidmain(){Studentstud;stud.display();return0;}類庫(kù)類庫(kù):把若干個(gè)常用的功能相近的類聲明集中在一起,形成類庫(kù)。C++編譯器提供的標(biāo)準(zhǔn)類庫(kù);如標(biāo)準(zhǔn)輸入流對(duì)象cin就是在標(biāo)準(zhǔn)類庫(kù)中定義的。還有常用的數(shù)學(xué)函數(shù)也是由標(biāo)準(zhǔn)類庫(kù)提供的,其聲明在math.h頭文件中給出。用戶根據(jù)自己的需要或出于商業(yè)的目的開(kāi)發(fā)的用戶類庫(kù),稱為自定義類庫(kù)。8.5.3對(duì)象、方法、消息類的成員函數(shù):方法調(diào)用成員函數(shù)的程序語(yǔ)句:消息inth,m,s;Ck1.Gettime(h,m,s);給對(duì)象Ck1發(fā)出一個(gè)消息,通知它執(zhí)行其中的Gettime方法,得到其私有成員hour,minute,second,保存到變量h,m,s里。8.6類和對(duì)象的簡(jiǎn)單應(yīng)用舉例書(shū)上的例子例8.1,類Time不含函數(shù)成員。例8.2程序(a):多個(gè)Time對(duì)象,在主函數(shù)中依次對(duì)其成員進(jìn)行賦值,然后輸出;程序(b):在主函數(shù)中定義set_time函數(shù),實(shí)現(xiàn)對(duì)Time對(duì)象成員的賦值,定義show_time函數(shù),實(shí)現(xiàn)輸出Time對(duì)象的成員;程序(c):set_time函數(shù)改為通過(guò)參數(shù)實(shí)現(xiàn)對(duì)Time對(duì)象成員的賦值,并且是默認(rèn)參數(shù)。例8.3,用含成員函數(shù)的Time類實(shí)現(xiàn)例8.2例8.4,用類的方法實(shí)現(xiàn)找出一個(gè)整數(shù)數(shù)組中的元素的最大值。課后習(xí)題6需要求3個(gè)長(zhǎng)方體的體積,請(qǐng)編寫(xiě)一個(gè)基于對(duì)象的程序。對(duì)象的數(shù)據(jù)成員包括length,width,height。要求用成員函數(shù)實(shí)現(xiàn)以下功能:由鍵盤(pán)分別輸入3個(gè)長(zhǎng)方體的長(zhǎng)、寬、高;計(jì)算長(zhǎng)方體的體積;輸出3個(gè)長(zhǎng)方體的體積。分析:類的3個(gè)數(shù)據(jù)成員都是私有的;成員函數(shù)get_value實(shí)現(xiàn)從鍵盤(pán)上輸入3個(gè)成員數(shù)據(jù);成員函數(shù)volume實(shí)現(xiàn)計(jì)算長(zhǎng)方體的體積;成員函數(shù)display實(shí)現(xiàn)輸出長(zhǎng)方體的體積;classBox{public:

voidget_value();

floatvolume();

voiddisplay();private:

floatlengh,width,height;};voidBox::get_value(){cout<<"pleaseinputlengh,width,height:";cin>>lengh;cin>>width;cin>>height;}floatBox::volume(){return(lengh*width*height);}voidBox::display(){cout<<volume()<<endl;}intmain(){Boxbox1,box2,box3;box1.get_value();cout<<"volmueofbax1is";box1.display();box2.get_value();cout<<"volmueofbax2is";box2.display();box3.get_value();cout<<"volmueofbax3is";box3.display();

return0;}改進(jìn):再定義一個(gè)成員,記錄長(zhǎng)方體的體積classBox{public:

voidget_value();

floatvolume();

voiddisplay();private:

floatlengh,width,height;

floatvol;};voidBox::get_value(){cout<<"pleaseinputlengh,width,height:";cin>>lengh;cin>>width;cin>>height;}floatBox::volume(){vol=lengh*width*height;}voidBox::display(){cout<<vol<<endl;}Person類新建控制臺(tái)工程(Win32ConsoleApplication)頭文件person.h#include<iostream.h>#include<string.h>classPerson{private:

charName[20];

unsignedAge;

charSex;public:

voidRegister(constchar*,int,char);//為數(shù)據(jù)成員賦值

voidGetName(char*na) //取得數(shù)據(jù)成員Name {strcpy(na,Name);};

intGetAge() //取得數(shù)據(jù)成員Age {return(Age);};

charGetSex(); //取得數(shù)據(jù)成員sex {return(Sex);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論