




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章類(lèi)和對(duì)象從簡(jiǎn)單到復(fù)雜人類(lèi)發(fā)展史,是一部從簡(jiǎn)單到復(fù)雜,從容易到困難的探索歷史以交通工具的生產(chǎn)制作為例說(shuō)明。任何一個(gè)合格的木匠都能獨(dú)立制作一輛馬車(chē)。復(fù)雜的交通工具再優(yōu)秀的工程師都無(wú)法獨(dú)立生產(chǎn)一輛汽車(chē)甚至一輛自行車(chē)。那該怎么辦呢?采用面向?qū)ο蟮脑O(shè)計(jì)思想對(duì)問(wèn)題的表述從簡(jiǎn)到繁單個(gè)變量:反映無(wú)關(guān)聯(lián)的屬性
inta,b,c;變量的集合數(shù)組:反映同類(lèi)型相關(guān)屬性inta[10],b[20];結(jié)構(gòu)體:反映相關(guān)屬性,可以描述較復(fù)雜的事物的屬性(不同類(lèi)型)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è)類(lèi)型中定義屬性,同時(shí)定義與這些屬性相關(guān)的操作問(wèn)題三:對(duì)客觀世界的描述,總是屬性(數(shù)據(jù))與性能(動(dòng)作)相聯(lián)系的,在計(jì)算機(jī)內(nèi)部如何表達(dá)?類(lèi)“時(shí)鐘”類(lèi)的定義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)特征:屬性;考慮汽車(chē)有哪些屬性?動(dòng)態(tài)特征:行為;考慮汽車(chē)有哪些行為?一個(gè)系統(tǒng)的多個(gè)對(duì)象之間通過(guò)消息相互聯(lián)系。考慮行駛到路口的汽車(chē)考到紅燈這個(gè)信號(hào)(消息)時(shí)會(huì)產(chǎn)生什么樣的行為?注意:汽車(chē)是一個(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ī)的接口抽象什么是汽車(chē)?把具有輪子,能滾動(dòng)前進(jìn)的陸地交通工具統(tǒng)稱(chēng)為“車(chē)子”。再進(jìn)一步,把用汽油發(fā)動(dòng)機(jī)驅(qū)動(dòng)的車(chē)子抽象為“汽車(chē)”,把用馬拉的車(chē)子抽象為“馬車(chē)”,用腳蹬的車(chē)子抽象為腳踏車(chē)。具有某些相同的屬性和行為類(lèi)與對(duì)象:類(lèi)是對(duì)象的抽象,對(duì)象是類(lèi)的特例,是類(lèi)的具體表現(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)。繼承車(chē)子馬車(chē)汽車(chē)腳踏車(chē)多態(tài)性考慮,停在路口的汽車(chē)和馬車(chē),當(dāng)看到左轉(zhuǎn)向的信號(hào)燈由紅燈變?yōu)榫G燈時(shí),分別拐向機(jī)動(dòng)車(chē)道和非機(jī)動(dòng)車(chē)道。多態(tài)性:由繼承而產(chǎn)生的相關(guān)的不同的類(lèi),其對(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ì)所需的各種類(lèi)和對(duì)象,即決定把哪些數(shù)據(jù)和操作封裝在一起;考慮怎樣向有關(guān)對(duì)象發(fā)送消息,以完成所需的任務(wù)。8.1.3類(lèi)和對(duì)象的作用基于對(duì)象:Object-Based,以類(lèi)和對(duì)象為基礎(chǔ),程序的操作時(shí)圍繞對(duì)象進(jìn)行的。面向?qū)ο螅篛bject-Oriented,在基于對(duì)象的基礎(chǔ)上,利用繼承機(jī)制和多態(tài)性,實(shí)現(xiàn)重用性。類(lèi)是所有面向?qū)ο蟮恼Z(yǔ)言的共同特征,所有面向?qū)ο蟮恼Z(yǔ)言都提供了這種類(lèi)型一個(gè)有一定規(guī)模的C++程序是由許多類(lèi)所構(gòu)成的一個(gè)有一定規(guī)模的C++程序在執(zhí)行時(shí)表現(xiàn)為許多相關(guān)的對(duì)象相互之間的作用8.2類(lèi)的聲明和對(duì)象的定義8.2.1類(lèi)和對(duì)象的關(guān)系類(lèi)與對(duì)象的關(guān)系如同結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量的關(guān)系。具體來(lái)說(shuō),就是:類(lèi)是對(duì)象的抽象,而對(duì)象是類(lèi)的具體實(shí)例。類(lèi)是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間。人小李小周…抽象的概念具體的人8.2.2聲明類(lèi)類(lèi)型類(lèi)聲明方法及例子如下: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; }};在類(lèi)里包含了數(shù)據(jù)成員和操作數(shù)據(jù)成員的成員函數(shù),實(shí)現(xiàn)了把數(shù)據(jù)和操作封裝在一起。成員訪問(wèn)限定符,如不指定,則默認(rèn)為private類(lèi)類(lèi)型的聲明,一般形式如下:
class
類(lèi)名{
private:私有的數(shù)據(jù)和成員函數(shù);
public:公用的數(shù)據(jù)和成員函數(shù);
protected: 保護(hù)的數(shù)據(jù)和成員函數(shù);};
inthour;intminute;intsecond;DoorSettimeGettimehour,minute,secondprivatememberhourminutesecond成員訪問(wèn)限定符public:既可以被本類(lèi)中的成員函數(shù)訪問(wèn),也可以被類(lèi)的作用域內(nèi)的其他函數(shù)訪問(wèn)。private:只能被本類(lèi)中的成員函數(shù)訪問(wèn),在類(lèi)外(友元類(lèi)例外,第9章)不能被訪問(wèn)。(注意理解類(lèi)外的含義)protected:不能被類(lèi)外訪問(wèn),但可以被派生類(lèi)的成員函數(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;}};私有成員,只有類(lèi)內(nèi)部定義的函數(shù)可以訪問(wèn)。公有成員,類(lèi)內(nèi)部、外部定義的函數(shù)都可以調(diào)用。注意理解“類(lèi)外”的含義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類(lèi)是“外部”的,不能直接訪問(wèn)Clock內(nèi)的私有成員,但可以通過(guò)調(diào)用Clock定義的公有函數(shù),實(shí)現(xiàn)對(duì)Clock私有成員的設(shè)置與數(shù)據(jù)獲取。理解“類(lèi)的作用域”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類(lèi)的聲明必須出現(xiàn)在使用之前理解類(lèi)內(nèi)部的作用域類(lèi)是一個(gè)自成一體的“小世界”,其中的標(biāo)識(shí)符(包括數(shù)據(jù)成員和成員函數(shù))作用范圍是類(lèi)內(nèi)部:類(lèi)中的成員可以訪問(wèn)同一類(lèi)的其它成員;類(lèi)內(nèi)部成員函數(shù)中定義的局部變量可以屏蔽同名的數(shù)據(jù)成員;classA{private:
intx,y;public:
voidf() {
intx;...//A::x被屏蔽 }};8.2.3定義對(duì)象的方法與使用結(jié)構(gòu)體類(lèi)型定義結(jié)構(gòu)體變量類(lèi)似//方法一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)用類(lèi)的公有成員函數(shù)訪問(wèn)類(lèi)中的私有成員。函數(shù)參數(shù)傳遞使用哪種方式?8.2.4類(lèi)和結(jié)構(gòu)體類(lèi)型的異同在C++里,從功能上說(shuō),類(lèi)類(lèi)型和結(jié)構(gòu)體類(lèi)型完全一樣(在結(jié)構(gòu)體里也可以定義函數(shù)),在C++保留結(jié)構(gòu)僅僅是為了與C語(yǔ)言兼容。用struct聲明的類(lèi)和用class聲明的類(lèi)的區(qū)別:用struct聲明的類(lèi),其成員訪問(wèn)屬性默認(rèn)為public,用class聲明的類(lèi),其成員訪問(wèn)屬性默認(rèn)為private。一般來(lái)說(shuō),對(duì)簡(jiǎn)單的類(lèi)(不包含成員函數(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類(lèi)的成員函數(shù)8.3.1成員函數(shù)的性質(zhì)接口函數(shù):需要被外界調(diào)用的成員函數(shù),必須設(shè)置為public;工具函數(shù):只被類(lèi)中其他函數(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在類(lèi)外定義成員函數(shù)成員函數(shù)可以直接在類(lèi)里定義,也可以先在類(lèi)里聲明,然后在類(lèi)外定義。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)算符:在類(lèi)內(nèi)部聲明和定義成員函數(shù)時(shí)不需要加作用域運(yùn)算符;在類(lèi)外部定義類(lèi)的成員函數(shù)時(shí),需要加作用域運(yùn)算符;如果在外部定義函數(shù)時(shí)加了作用域運(yùn)算符::,但在前面沒(méi)有加類(lèi)名,或者既無(wú)類(lèi)名又無(wú)作用域運(yùn)算符,定義的都是普通的全局函數(shù),如:::display()或display()8.3.3inline成員函數(shù)P97內(nèi)置函數(shù)(inline函數(shù))提出原因:函數(shù)調(diào)用開(kāi)銷(xiāo)(保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng))比較大。適用范圍:代碼簡(jiǎn)單且頻繁調(diào)用的函數(shù)。(現(xiàn)在的編譯系統(tǒng)已經(jīng)能夠識(shí)別這類(lèi)函數(shù)并自動(dòng)將函數(shù)設(shè)置為內(nèi)置函數(shù),并不取決與用戶(hù)是否將函數(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;}類(lèi)的成員函數(shù)的內(nèi)置處理出發(fā)點(diǎn):也是為了減小時(shí)間開(kāi)銷(xiāo)。處理方法:對(duì)于在類(lèi)里面定義的成員函數(shù),默認(rèn)為內(nèi)置函數(shù),因此inline可以省略對(duì)于在類(lèi)外面定義的成員函數(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ǔ)方式聲明類(lèi)之后,用類(lèi)去定義對(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è)類(lèi)的每個(gè)對(duì)象數(shù)據(jù)值不相同,但成員函數(shù)的代碼是完全一樣的。方法二:只用一段存儲(chǔ)空間來(lái)存儲(chǔ)同一個(gè)類(lèi)不同對(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類(lèi)引用變量t2,并使之初始化為t1cout<<t2.hour;//輸出對(duì)象t1中的成員hour說(shuō)明:同一類(lèi)型的對(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類(lèi)的封裝性和信息隱蔽面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,封裝性和信息隱蔽的目的:為保證安全性,盡可能不讓類(lèi)外的函數(shù)直接使用類(lèi)的數(shù)據(jù)成員;為保密起見(jiàn),盡可能不公開(kāi)成員函數(shù)的代碼;為使用方便和減小開(kāi)銷(xiāo),在使用類(lèi)時(shí)只需加載盡可能少的文件,和避免重復(fù)加載。實(shí)現(xiàn)的原則:公用接口和私有實(shí)現(xiàn)的分離類(lèi)聲明和成員函數(shù)定義的分離8.5.1公用接口與私有實(shí)現(xiàn)的分離一般把類(lèi)的數(shù)據(jù)成員設(shè)置為私有,不允許外界直接訪問(wèn)數(shù)據(jù)成員,公用成員函數(shù)充當(dāng)使用類(lèi)的公用接口。公用成員函數(shù)的代碼一般是不公開(kāi)的,其中實(shí)現(xiàn)的細(xì)節(jié)是隱蔽的,稱(chēng)為私有實(shí)現(xiàn)。
inthour;intminute;intsecond;DoorSettimeGettimehour,minute,secondprivatememberhms8.5.2類(lèi)聲明和成員函數(shù)定義的分離出發(fā)點(diǎn):把類(lèi)的聲明和成員函數(shù)的實(shí)現(xiàn)分別放在不同的文件里。頭文件的處理:如果在程序中需要使用到該類(lèi),只要把頭文件包含進(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;}使用類(lèi)的接口文件包含預(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;}類(lèi)庫(kù)類(lèi)庫(kù):把若干個(gè)常用的功能相近的類(lèi)聲明集中在一起,形成類(lèi)庫(kù)。C++編譯器提供的標(biāo)準(zhǔn)類(lèi)庫(kù);如標(biāo)準(zhǔn)輸入流對(duì)象cin就是在標(biāo)準(zhǔn)類(lèi)庫(kù)中定義的。還有常用的數(shù)學(xué)函數(shù)也是由標(biāo)準(zhǔn)類(lèi)庫(kù)提供的,其聲明在math.h頭文件中給出。用戶(hù)根據(jù)自己的需要或出于商業(yè)的目的開(kāi)發(fā)的用戶(hù)類(lèi)庫(kù),稱(chēng)為自定義類(lèi)庫(kù)。8.5.3對(duì)象、方法、消息類(lèi)的成員函數(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類(lèi)和對(duì)象的簡(jiǎn)單應(yīng)用舉例書(shū)上的例子例8.1,類(lèi)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類(lèi)實(shí)現(xiàn)例8.2例8.4,用類(lèi)的方法實(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)方體的體積。分析:類(lèi)的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類(lèi)新建控制臺(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)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 材料疲勞斷裂預(yù)測(cè)方法重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 材料疲勞壽命影響因素分析重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 船員發(fā)現(xiàn)火災(zāi)后應(yīng)急預(yù)案(3篇)
- 行政法學(xué)學(xué)者觀點(diǎn)試題及答案總結(jié)
- 機(jī)房漏水火災(zāi)應(yīng)急預(yù)案(3篇)
- 行政法學(xué)專(zhuān)業(yè)的學(xué)習(xí)方法與試題及答案
- 2025年網(wǎng)絡(luò)管理員備考策略試題及答案
- 網(wǎng)絡(luò)存取控制策略試題及答案
- 行政法學(xué)備考過(guò)程中的心理建設(shè):試題及答案
- 網(wǎng)絡(luò)管理員考試特色解析試題及答案
- 職工休假請(qǐng)假條模板
- 心臟康復(fù)指南完整版
- 國(guó)開(kāi)電大土木工程本科《工程地質(zhì)》在線形考形考(作業(yè)1至4)試題及答案
- 藥物咨詢(xún)記錄
- 售后維修服務(wù)單
- 國(guó)家中長(zhǎng)期科技發(fā)展規(guī)劃綱要2021-2035
- ZDY3200S型煤礦用全液壓坑道鉆機(jī)行業(yè)資料礦業(yè)工程
- 北師大版八年級(jí)數(shù)學(xué)下冊(cè) (一元一次不等式)一元一次不等式和一元一次不等式組課件(第2課時(shí))
- 護(hù)理安全警示教育PPT
- 草圖大師基礎(chǔ)命令教程
- 清華大學(xué)工商管理專(zhuān)業(yè)課程設(shè)置
評(píng)論
0/150
提交評(píng)論