




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三類與對(duì)象(三一靜態(tài)成員、常量成員、友元、對(duì)象成員一、實(shí)驗(yàn)?zāi)康睦斫忪o態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)的作用,熟悉其應(yīng)用;理解常量對(duì)彖、常量數(shù)據(jù)成員、常量成員函數(shù)作用,熟悉相互關(guān)系及應(yīng)用;熟悉友元函數(shù)、友元類的定義及應(yīng)用;熟悉對(duì)象成員(容器類)的應(yīng)用;進(jìn)一步熟悉類與對(duì)彖的應(yīng)用及編程。二、實(shí)驗(yàn)學(xué)時(shí)課內(nèi)實(shí)驗(yàn):2課時(shí)課外練習(xí):2課時(shí)三本實(shí)驗(yàn)涉及的新知識(shí)㈠靜態(tài)成員靜態(tài)成員分為靜態(tài)數(shù)據(jù)成員及靜態(tài)成員函數(shù)。靜態(tài)數(shù)據(jù)成員(1)靜態(tài)數(shù)據(jù)成員的定義(類中定義)格式:static類型數(shù)據(jù)成員名表;(2)靜態(tài)數(shù)據(jù)成員的作用靜態(tài)數(shù)據(jù)成員在一個(gè)類中只有一個(gè)拷貝,屬于一個(gè)類(或者說屬于類的第一個(gè)對(duì)彖),所有對(duì)象都共享靜態(tài)成員。靜態(tài)數(shù)據(jù)成員是連接各個(gè)對(duì)象的橋梁,可用來取代全局變量,主要用于各個(gè)對(duì)彖都共享的公用數(shù)據(jù),如:總數(shù)的統(tǒng)計(jì)、平均數(shù)等。(3)說明靜態(tài)數(shù)據(jù)成員可以說明為公有成員、私有成員或保護(hù)成員,但一般不說明為公有成員:靜態(tài)數(shù)據(jù)成員同其它數(shù)據(jù)成員一樣,不能在類中進(jìn)行初始化(不分配內(nèi)存空間);靜態(tài)數(shù)據(jù)成員由于屬于類(不依賴任何對(duì)彖),應(yīng)在程序開始運(yùn)行時(shí)即生成,必須在任何函數(shù)之外進(jìn)行初始化操作;格式:類型類名::靜態(tài)數(shù)據(jù)成員二初值;使用靜態(tài)數(shù)據(jù)成員取代全局變量,使數(shù)據(jù)更為安全:當(dāng)在類中需要共享某一數(shù)據(jù)成員時(shí)通常定義為靜態(tài)數(shù)據(jù)成員;靜態(tài)數(shù)據(jù)成員與靜態(tài)對(duì)彖是兩個(gè)完全不同的概念,前者(靜態(tài)數(shù)據(jù)成員)是在類中定義的,是類的所有對(duì)彖共享的數(shù)據(jù)成員,而后者(靜態(tài)對(duì)彖)是指對(duì)象存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。靜態(tài)成員函數(shù)(1)靜態(tài)成員函數(shù)的定義靜態(tài)成員函數(shù)是在定義類的成員函數(shù)時(shí),在成員函數(shù)名前加上statico(2)靜態(tài)成員函數(shù)的調(diào)用方法用類名調(diào)用格式:類名::靜態(tài)成員函數(shù)名(實(shí)參表);用對(duì)象調(diào)用格式:對(duì)象名?靜態(tài)成員函數(shù)名(實(shí)參表);(3)說明靜態(tài)成員函數(shù)可以在類內(nèi)部定義(必須加上static),也可在類外定義,即在類體內(nèi)聲明,在類體外定義,定義時(shí)與普通成員函數(shù)相同;靜態(tài)成員函數(shù)無tlus指針(this指針屬于某一對(duì)彖,靜態(tài)成員屬于一個(gè)類),只能訪問靜態(tài)數(shù)據(jù)成員,不能訪問普通數(shù)據(jù)成員,因此靜態(tài)成員函數(shù)專門用來訪問靜態(tài)數(shù)據(jù)成員;當(dāng)在類中定義有靜態(tài)數(shù)據(jù)成員時(shí),通常應(yīng)定義靜態(tài)成員函數(shù)來訪問靜態(tài)數(shù)據(jù)成員。㈡常量成員函數(shù)、常量數(shù)據(jù)成員及常量對(duì)象在C卄中可以用const定義常量對(duì)彖(也稱為常對(duì)彖)、常量成員函數(shù)(也稱為常成員函數(shù))、常量數(shù)據(jù)成員(也稱為常數(shù)據(jù)成員)。常量成員函數(shù)的定義(1)在類中定義:返回類型成員函數(shù)名(參數(shù)表)const{函數(shù)體}(2)在類外定義類中聲明:返回類型成員函數(shù)名(參數(shù)表)const;類外定義:返回類型類名::成員函數(shù)名(參數(shù)表)const{函數(shù)體}常量數(shù)據(jù)成員的定義定義格式:const數(shù)據(jù)類型成員名或:數(shù)據(jù)類型const成員名常量對(duì)象的定義定義格式:類名const對(duì)象名表;或:const類名對(duì)象名表說明(1)常量對(duì)象只能在定義時(shí)初始化,其數(shù)據(jù)成員的值不能改變。(2)常量對(duì)象只能調(diào)用常屋成員函數(shù),不能調(diào)用普通成員函數(shù);而普通對(duì)象既町調(diào)用普通成員函數(shù),也可以調(diào)用常量成員函數(shù)。(3)普通成員函數(shù)可以訪問本類的常量成員函數(shù),而常量成員函數(shù)不能訪問本類的普通成員函數(shù)。(4)常量成員函數(shù)與普通成員函數(shù)同名時(shí),構(gòu)成函數(shù)的重載,其參數(shù)類型和個(gè)數(shù)可以相同,而用const加以區(qū)分。(5)常量數(shù)據(jù)成員必須在構(gòu)造函數(shù)中通過初始化列表進(jìn)行初始化,初始化后值不能改變。(6)常量數(shù)據(jù)成員及成員函數(shù)隸屬于某一對(duì)彖(與靜態(tài)數(shù)據(jù)成員的差異)。㈢友元友元的概念在C卄中提供了一種類以外的函數(shù)訪問類的私有成員、保護(hù)成員的方法,即將這些函數(shù)定義為類的友元。友元的種類及應(yīng)用(1)友元函數(shù)定義方法:在類中進(jìn)行聲明時(shí),在聲明的前面加上fhend。說明:友元函數(shù)不是類的成員函數(shù),除非確因成員函數(shù)使用頻繁,需要提高程序的執(zhí)行效率而定義為友元函數(shù)外,一般不要定義。友元函數(shù)可以訪問對(duì)彖的私有成員和保護(hù)成員,只是在類中聲明時(shí)加上fnend,但它不是成員函數(shù),定義時(shí)不能在函數(shù)名前加上“類名:友元函數(shù)無this指針,一般至少應(yīng)帶有一個(gè)入II參數(shù),通過入II參數(shù)傳遞的對(duì)象名來引用該對(duì)象的成員。友元函數(shù)主要用于運(yùn)算符的重載。(2)友元成員友元成員是指一個(gè)類的成員函數(shù)可以是另一個(gè)類的友友元函數(shù),這樣就可以通過一個(gè)類的成員函數(shù)訪問另一個(gè)類的私有成員或保護(hù)成員。說明:一個(gè)類的成員函數(shù)要作為另一個(gè)類的友元函數(shù)時(shí),必須先定義這個(gè)類。由于友元函數(shù)所在的類名先于類的定義出現(xiàn),應(yīng)先聲明。(3)友元類友元類是指一個(gè)類可以作為另一個(gè)類的友元,這樣友元類的所有成員函數(shù)均可以訪問另一個(gè)類中的成員。㈣容器類容器類的概念在定義一個(gè)類的數(shù)據(jù)成員時(shí),除可以是基本數(shù)據(jù)成員外,還可以是其它類的對(duì)彖,稱為對(duì)象成員。含有對(duì)彖成員的類稱為容器類。容器類構(gòu)造函數(shù)(1)格式類名(形參表):成員名1(參數(shù)表1),,成員名n(參數(shù)表11)(2)說明:容器類中至少應(yīng)有一個(gè)構(gòu)造函數(shù),以通過參數(shù)表為成員對(duì)彖賦初值。創(chuàng)建容器類對(duì)彖時(shí),先執(zhí)行對(duì)彖成員所屬類的構(gòu)造函數(shù),再執(zhí)行容器類構(gòu)造函數(shù)的函數(shù)體。釋放容器類對(duì)彖時(shí),先調(diào)用容器類的析構(gòu)函數(shù),再調(diào)用對(duì)象成員所屬類的析構(gòu)函數(shù)。用容器類對(duì)彖調(diào)用對(duì)彖成員所屬類的公有成員函數(shù)格式:容器類對(duì)象成員名?對(duì)象成員所屬類名::成員函數(shù)名(實(shí)參表);四、實(shí)驗(yàn)內(nèi)容㈠驗(yàn)證及認(rèn)知實(shí)驗(yàn)按要求調(diào)試下列程序并回答相關(guān)問題。程序1(exp_301.cpp)#iiiclude<iostieam.h>classcounter{private:
staticmtcount;cliarch;public:counter(charc)staticmtcount;cliarch;public:counter(charc)//普通數(shù)據(jù)成員〃構(gòu)造函數(shù){this->count++;ch=c;}voidpiiiit_counter(void){cout?ch?H:,,?count?endl;}-counter(void){count-;}};intcounter::count=100;//靜態(tài)數(shù)據(jù)成員賦初值voidniam(void){countercl(A*);cl.print_counter();cout?endl;counterc2(,B,);cl.print_counter();c2.print_counter();cout?endl;counterc3(C);cl.print_counter();c2.print_counter();c3.print_counter();}問題:(1)運(yùn)行該程序的輸出結(jié)果為由輸出結(jié)果可知,靜態(tài)成員屬于?在類中只有拷貝。程序中的“mtcounter::count=100;°的作用是,如果將其放在main()函數(shù)中,重新編譯程序,會(huì)出現(xiàn)?其原因是,程序2〃頭文件“hhpoint.h”中point類的定義:classpoint{private:floatx,v;
〃無參構(gòu)造函數(shù)〃構(gòu)造函數(shù)重載〃無參構(gòu)造函數(shù)〃構(gòu)造函數(shù)重載//拷貝構(gòu)造函數(shù)pomt(void){x=O;y=O;}point(floata.floatb){x=a;y=b;}point(constpoint&ob){x=ob.x;y=ob.y;}voidset_point(floata.floatb);floatread_x(void);floatread_y(void);voidmove(floata,floatb);voidpiiiit(void);};voidpoint::set_pomt(floata.floatb){x=a;y=b;}floatpomt::read_x(void){retunix;}floatpomt::read_y(void){retuniy;}voidpoint::move(floata.floatb){x+=a;y+=b;}voidpoint::piint(void){cout?Hx=H?x?Mv=n?y?endl;}〃頭文件Joint.h”中point類的定義:classpoint{private:floatx、y;〃無參構(gòu)造函數(shù)〃構(gòu)造函數(shù)重載〃無參構(gòu)造函數(shù)〃構(gòu)造函數(shù)重載〃拷貝構(gòu)造函數(shù)pomt(void){x=O;y=O;}point(floata.floatb){x=a;y=b;}point(constpoint&ob){x=ob.x;y=ob.y;}voidset_point(floata.floatb);floatread_x(void);floatread_y(void);floatread_x(void)const;floatread_y(void)const;voidmove(floata,floatb);voidmove(floata,floatb)const;};voidpoint::set_pomt(floata.floatb){x=a;y=b;}floatpomt::read_x(void){retunix;}floatpomt::read_y(void){retuniy;}voidpoint::move(floata.floatb){x+-a;y+=b;}floatpomt::read_x(void)const{retunix;}floatpomt::read_y(void)const{retuniy;}//voidpoint::move(floata,floatb)const//(8)〃{x+=a;y+=b;}//(9)〃文件“exp_302.cpp”中定義的測(cè)試程序:#mclude<iostieam.h>#mclude,,lilipomt.hH//(I)//#iiicludenpoint.hM//(2)voidniam(void){constpointcentei(100.100);pointp(20,40);cout?,,Befbremoving:"?endl:cout?Hp:',?Mx=H?p.read_x();cout?My=u?p.read_yQ?endl;cout?Mcenter:H?Mx=M?center.read_xO;cout?My=n?center.read_y()?endl://p.move(10,20);〃⑶//cout?HAftermoving:H?endl;//(4)//cout?Hp:H?Hx=H?p.iead_x();〃⑸//cout?Hy=M?p.iead_y()?eiidl;〃(6)//center.move(20.20);〃(7)}問題:⑷編譯程序,會(huì)出現(xiàn),其出錯(cuò)原因是⑸將程序中(1)改為注釋,再將(2)行首的注釋去掉,再編譯運(yùn)行程序,程序的輸出結(jié)果為:⑹將程序中(3)—(6)行首的注釋去掉,程序的輸出結(jié)果為:(7)將程序中的(7)行首的注釋去掉,編譯程序時(shí)無錯(cuò),而運(yùn)行程序時(shí)會(huì)出現(xiàn)錯(cuò)誤,其原因是。程序3(亡xp_303.cpp)#mclude<iostieam.h>#mclude<stimg.h>classgirl{private:char*naine;mtage;public:gi【l(char*na,mtn){name=newchai[strlen(na)+l];strcpy(nameaia);age=n;}^giil(void){deletename;}〃釋放new分配的內(nèi)存char*get_name(void){retuniname;}mtget_age(void){retuniage;}voidpimt_girl(void);};voidgirt:piiiit_girl(void){cout?H姓名:n?name;cout?M年齡:,,?age?endl;}voiddisp(giil&g){cout?H姓名:M?;cout?M年齡:,,?g.age?endl;}voidniaiii(void){giiigl(H李小丫“,⑵,g2(”王永蘭“,15),g3(”趙夢(mèng)美”」3);cout?M姓名:,,?gl.get_name();
cout?M年齡:H?gl.get_age()?endl;g2.pnnt_gul();disp(g3);}問題:⑻編譯程序出錯(cuò)的原因是⑼在girl類中加上afriendvoiddisp(girl&g);”重新編譯、運(yùn)行程序,其輸出結(jié)果為:其中friendvoiddisp(gul&g);”表示函數(shù)disp()為girl類的°㈡知識(shí)應(yīng)用實(shí)驗(yàn)1.分析下列程序,寫出程序的輸出結(jié)果,再上機(jī)運(yùn)行程序驗(yàn)證其正確性,如果不正確,請(qǐng)認(rèn)真分析出錯(cuò)原因。程序4(exp_304.cpp)#mclude<iostieam.h>classsunpie#mclude<iostieam.h>classsunpie{private:staticmtvl,v2?v3;public:smiple(intx=0,inty=0){vl=x;v2=y;}staticvoidsum(void)你分析的程序輸出結(jié)呆是:程序的實(shí)際輸出結(jié)果是:mtget_v3(void){returnv3;}intsunpie::vl=0;intsunpie::v2=0;intsunpie::v3=0;voidniaiii(void){simpleobi(5,10);obl.suniQ;cout?M(l):H?ob1.get_v3()?endl;sunpieob2(10,20);sunpie::sum();cout?M(2):H?ob2.get_v3()?endl;程序5(exp_3O5.cpp)#mclude<iostieam.h>你分析的程序輸出結(jié)果是:#mclude<stimg.h>你分析的程序輸出結(jié)果是:classboy;//類boy的聲明;classgill{private:char*naine;mtage;public:程序的實(shí)際輸出結(jié)果是:giil(char*na,mtn){name=newchai[strlen(na)+l];strcpy(nameaia);age=n;}^giil(void){deletename;}〃釋放new分配的內(nèi)存friendvoiddisp(girl&g,boy&b);〃聲明disp為gill類友元函數(shù)};classbovJ{private:char*naine;mtage;public:boy(char*na,iiitn){name=newchai[strlen(na)+l];strcpy(nameaia);age=n;}^bov(void){deletename;}〃釋放new分配的內(nèi)存friendvoiddisp(girl&g,boy&b);〃聲明disp為boy類友元函數(shù)};voiddisp(giil&g.boy&b)〃定義友元函數(shù):不是類的成員不需要作用域運(yùn)算符{cout?'f女孩姓名:”;cout?M年齡:,,?g.age?endl;cout?M男孩姓名:H?;cout?M年齡:y<b?age?endl;}voidniaiii(void){giiigl(”李小丫”,12);boybl(”張海兵”,15);disp(gl,bl);//調(diào)用友元函數(shù):與普通函數(shù)調(diào)用相同}程序6你分析的程序輸出結(jié)果是:〃頭文件"hdate.h"的內(nèi)容:〃定義"date"類classdate
你分析的程序輸出結(jié)果是:{private:intyeai;month.day;public:date(void)程序的實(shí)際輸出結(jié)果是:{yeai-1980;month=1;day=1;}date(iiitvjntm.iiitd)程序的實(shí)際輸出結(jié)果是:{year=y;month=m;day=d;}mtget_yeai(void){returnyear;}mtget_month(void){returnmonth;}mtget_day(void){returnday;}};〃頭文件“hpeison?h”的內(nèi)容:定義“pereon”類#mclude<stimg.h>#mcludeHhdate.hHclassperson{private:cliar*naine;charsex[2];datebmhday;public:person(char*na,charyiiitd):buthday(y,nLd){name=newchai[strlen(na)+l];strcpy(nameaia);strcpy(sex.s);}char*get_name(void){returnname;}char*get_sex(void){returnsex;}mtget_yeai(void){ieturnbmhday.get_yearQ;}mtget_month(void){returnbutliday.get_month();}mtget_day(void){returnbmhday.get_dav();}-person(void){delete[]name;}voidpiiiit(void);};voidperson::pimt(void){cout?H姓名:,,?name?endl;cout?M性別:,,?sex?endl;cout?M出生日期:,,?birthday.get_year()?H年典;cout?bmhday.get_month()?H月”;cout?biithdayget_day()?"口H?endl;}〃測(cè)試程序"exp.306.cpp"#mclude<iostieam.h>#mcludeHhperson.hHvoidniaiii(void){personpsl(”張小三丁男7985)2,15);personps2「李小丫丁女”,1986,3,9);psl.priiitQ;cout?e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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年三年級(jí)數(shù)學(xué)第二學(xué)期期末質(zhì)量檢測(cè)模擬試題含解析
- 運(yùn)城幼兒師范高等??茖W(xué)?!吨嗅t(yī)經(jīng)典》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年北京市西城區(qū)北京市第四中學(xué)高三“一診”模擬考試生物試題含解析
- 銀川科技學(xué)院《醫(yī)藥銷售實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 岳陽(yáng)職業(yè)技術(shù)學(xué)院《執(zhí)業(yè)醫(yī)師考試實(shí)踐技能培訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 石家莊科技職業(yè)學(xué)院《刑事文書寫作與模擬審判》2023-2024學(xué)年第二學(xué)期期末試卷
- 面神經(jīng)炎護(hù)理問題及措施
- 雷州旅游管理答辯
- 預(yù)算員的年終總結(jié)
- 預(yù)應(yīng)力施工流程
- 2024年可行性研究報(bào)告投資估算及財(cái)務(wù)分析全套計(jì)算表格(含附表-帶只更改標(biāo)紅部分-操作簡(jiǎn)單)
- FZ/T 51004-2011纖維級(jí)聚己內(nèi)酰胺切片
- 水輪發(fā)電機(jī)講義課件
- 部編版六年級(jí)語(yǔ)文下冊(cè)《語(yǔ)文園地三》優(yōu)秀課件
- 師德師風(fēng)學(xué)習(xí)筆記(精選多篇)
- DB15T 1417-2018 膠粉改性瀝青及混合料設(shè)計(jì)與施工規(guī)范
- 簡(jiǎn)支梁、懸臂梁撓度計(jì)算程序(自動(dòng)版)
- 2022年園林綠化養(yǎng)護(hù)技術(shù)標(biāo)
- 聚合物的高彈性和黏彈性(鳳山書屋)
- 物理人教版(2019)必修第二冊(cè)5.2運(yùn)動(dòng)的合成與分解(共19張ppt)
- 中國(guó)航信離港系統(tǒng)講義
評(píng)論
0/150
提交評(píng)論