資源描述:
《visual c++類和對(duì)象專題講解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第3章類和對(duì)象要求掌握:?C++怎樣構(gòu)造類和使用類?構(gòu)造函數(shù)和析構(gòu)函數(shù)?對(duì)象的指針本章主要內(nèi)容?類的定義?成員函數(shù)的定義?對(duì)象的定義?構(gòu)造函數(shù)與析構(gòu)函數(shù)?C++的封裝性?實(shí)例分析§3.1類和對(duì)象的基本概念3.1.1C++類的構(gòu)成類是一種將數(shù)據(jù)和操作合并為單一結(jié)構(gòu)的類型定義。用方程式表示:類=數(shù)據(jù)+操作(函數(shù))C++類的構(gòu)成包括類的聲明、類的定義兩個(gè)部分。一、類的聲明類的聲明包括:類的成員聲明和類成員的訪問控制聲明。形式:class類名{private:私有數(shù)據(jù)和函數(shù)只能由public中的函數(shù)使用protected:保護(hù)
2、數(shù)據(jù)和函數(shù)保護(hù)成員被該類和它的派生類訪問public:公共數(shù)據(jù)和函數(shù)可供用戶使用};類定義的結(jié)束標(biāo)志“;”容易被漏掉如:關(guān)鍵字class用以聲明一個(gè)類class后面的CTime是用戶自定義類名classCTime{private:inthour;intminute;intsecond;數(shù)據(jù)成員public:voidSetTime(inth,intm,ints);intGetHour(){returnhour;}成員函數(shù)intGetMinute(){returnminute;}intGetSecond(){returns
3、econd;}};類是由數(shù)據(jù)和函數(shù)構(gòu)成,它們稱為類的成員。公有成員在關(guān)鍵字public后面聲明,它們是類與外部的接口,任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。classA{intx;public:inty;voidSetXY(int,int);};voidA::SetXY(inta,intb){x=a;y=b;}voidmain(){Aas;as.SetXY(5,5);//Okas.y=5;//Ok}私有成員在關(guān)鍵字private后面聲明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。如果緊跟在類名稱的后面聲
4、明私有成員,則關(guān)鍵字private可以省略。classA{intx;public:inty;voidSetXY(int,int);};voidA::SetXY(inta,intb){x=a;y=b;}voidmain(){Aas;as.SetXY(5,5);//Okas.x=5;//Error}Note:1.類名后面的{}表示類的聲明范圍,最后的分號(hào)表示類聲明的結(jié)束。2.建議把所有的私有成員和公有成員歸類放在一起,并將私有成員放在公有成員的前面。3.數(shù)據(jù)成員可以是任意數(shù)據(jù)類型,但不能用auto、register或ext
5、ern進(jìn)行說明。例:classabcd{autoa;//非法registerb;//非法externc;//非法intd;public:intget(d);};4.不能在類的聲明中給類的數(shù)據(jù)成員賦初值;在類對(duì)象定義之后才能給數(shù)據(jù)成員賦初值。例:classabc{chara=’q’;//非法intb=33;//非法public:intget(b);};二、成員函數(shù)的定義(類的定義)C++提供兩種方式定義成員函數(shù),類中的成員函數(shù)的定義既可放在類中,也可放在類的外面。第一種方式:在類的聲明中,只給出成員函數(shù)的原型(用現(xiàn)代風(fēng)格
6、說明);而成員函數(shù)的定義放在類體的外部,稱為外聯(lián)函數(shù)。成員函數(shù)的定義放在外面,需在函數(shù)名前面加上類名和作用域區(qū)分符“::”。成員函數(shù)體在類的外部定義。其形式為:返回類型類名::函數(shù)名(參數(shù)表){//函數(shù)體類名加在成員函數(shù)名之前,而不是}加在函數(shù)的返回類型前classCTime{private:CTime::hourinthour;intminute;intsecond;public:voidSetTime(inth,intm,ints);intGetHour(){returnhour;}intGetMinute(){r
7、eturnminute;}intGetSecond(){returnsecond;}};CTime::GetSecond()inthour=0;//全局變量intminute=0;intsecond=0;voidSetTime(inth,intm,ints){::hour=h;::不跟類名時(shí),表示全局?jǐn)?shù)據(jù)或全局::minute=m;函數(shù)(即非成員函數(shù))::second=s;}//全局函數(shù)voidmain(){CTimet;::SetTime(5,5,5);//調(diào)用全局函數(shù)t.SetTime(::hour,::minut
8、e,::second);//調(diào)用類的成員函數(shù)}例:聲明并定義坐標(biāo)點(diǎn)類classpoint{intx,y;public:voidsetpoint(int,int);intgetx();intgety();};voidpoint::setpoint(inta,intb){x=a;y=b;}在類定義的外部定義成員函數(shù),必須在該函數(shù)前面使