天津理工大學(xué)C++期末考試_第1頁
天津理工大學(xué)C++期末考試_第2頁
天津理工大學(xué)C++期末考試_第3頁
天津理工大學(xué)C++期末考試_第4頁
天津理工大學(xué)C++期末考試_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實驗一明確的概念:〔1〕理解類和對象的概念;〔具體見附一〕類是抽象的對象是具體的例如:你、我、他都是人那么你、我、他就是對象人就是類〔2〕掌握類與對象的定義方法;類的定義:class類名{…/*定義這個類*/};//(別忘了最后的分號)對象的定義:類名對象名(參數(shù));〔3〕理解類的成員的訪問控制的含義,公有和私有成員的區(qū)別; public://訪問屬性為公有通過外部直接訪問即: private://訪問屬性為私有不能通過外部直接訪問〔不聲明訪問屬性時系統(tǒng)默認(rèn)為私有〕當(dāng)出現(xiàn)對象名.成員(私有)時編譯器報錯 protected://訪問屬性為保護(hù)與private類似但protected屬性的成員可以繼承private不能繼承〔4〕掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的含義與作用、定義方式和實現(xiàn); 構(gòu)造函數(shù):為數(shù)據(jù)成員開辟存儲空間 函數(shù)名必須與類名相同之前絕對不許說明返回值類型void也不行 構(gòu)造函數(shù)不能由用戶調(diào)用即:對象名.構(gòu)造函數(shù)名(參數(shù))是錯誤的 構(gòu)造函數(shù)是隨著對象的聲明而調(diào)用的 例如: classStudent{Student(){cout<<〞Hello.〞<<endl;}};Intmain(void){cout<<〞Hello.〞<<endl;StudentA;}運(yùn)行結(jié)果: Hello. //<-這個Hello是主函數(shù)中的 Hello. //<-是聲明A對象時調(diào)用的構(gòu)造函數(shù)構(gòu)造函數(shù)中的Hello 析構(gòu)函數(shù)功能與構(gòu)造函數(shù)相反注意調(diào)用時間和順序(看書)附:如何知道該程序析構(gòu)函數(shù)的調(diào)用順序是p3p2p1?答:將拷貝構(gòu)造函數(shù)中改為x=附:如何知道該程序析構(gòu)函數(shù)的調(diào)用順序是p3p2p1?答:將拷貝構(gòu)造函數(shù)中改為x=2*p.x;y=2*析構(gòu)函數(shù)中在cout<<〞Destructoriscalled.〞之后添加<<〞x=〞<<x<<〞y=〞<<y后面的不變運(yùn)行時析構(gòu)函數(shù)輸出結(jié)果變?yōu)椋篋estructoriscalled.x=12y=16Destructoriscalled.x=6y=8Destructoriscalled.x=3y=4Pressanykeytocontinue由此可知其調(diào)用順序或者在拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù)中的cout語句的<<endl;之前參加<<this來輸出對象地址再對號入座也可知調(diào)運(yùn)順序輸入以下程序,按要求進(jìn)行實驗,并記錄實驗的結(jié)果。#include<iostream>usingnamespacestd;classCoordinate{public: Coordinate(intx1,inty1){x=x1;y=y1;} Coordinate(Coordinate&p); ~Coordinate(){cout<<"Destructoriscalled."<<endl;} intgetx(){returnx;} intgety(){returny;}private: intx,y;};Coordinate::Coordinate(Coordinate&p){//拷貝構(gòu)造函數(shù) x=p.x;y=p.y; cout<<"Copyinitianizationconstructoriscalled."<<endl;運(yùn)行結(jié)果:Copyinitianizationconstructoriscalled.運(yùn)行結(jié)果:Copyinitianizationconstructoriscalled.Copyinitianizationconstructoriscalled.p3=(3,4)Destructoriscalled.Destructoriscalled.Destructoriscalled.Pressanykeytocontinue調(diào)用構(gòu)造函數(shù)調(diào)用拷貝構(gòu)造函數(shù)〔見書P89〕調(diào)用構(gòu)造函數(shù)調(diào)用拷貝構(gòu)造函數(shù)〔見書P89〕 Coordinatep1(3,4); Coordinatep2(p1); Coordinatep3=p2; cout<<"p3=("<<p3.getx()<<","<<p3.gety()<<")"<<endl;程序結(jié)束時調(diào)用析構(gòu)函數(shù)注意析構(gòu)函數(shù)的調(diào)用順序從上至下依此為p3p2p1的析構(gòu)函數(shù)程序結(jié)束時調(diào)用析構(gòu)函數(shù)注意析構(gòu)函數(shù)的調(diào)用順序從上至下依此為p3p2p1的析構(gòu)函數(shù) return0;}記錄程序的運(yùn)行結(jié)果將Coordinate類中帶有兩個參數(shù)的構(gòu)造函數(shù)進(jìn)行修改,在函數(shù)體內(nèi)增加如下語句:cout<<〞Constructoriscalled.〞<<endl; 重新記錄程序的運(yùn)行結(jié)果,并解釋輸出結(jié)果。按以下要求進(jìn)行測試。在主函數(shù)體內(nèi),添加如下語句:Coordinatep4; 錯誤原因:構(gòu)造函數(shù)沒有參數(shù)構(gòu)造函數(shù)為Coordinate::Coordinate(int,int)Coordinatep5(2); 錯誤原因:參數(shù)數(shù)量不對根據(jù)注釋語句的提示實現(xiàn)類Date的成員函數(shù),并將完整的程序編譯、連接成功以保證程序能夠正確運(yùn)行。#include<iostream.h>classDate{public: voidprintDate(); //顯示日期分析:1.題目中Date類的數(shù)據(jù)成員為day,month,year且均為整型訪問屬性為私有主函數(shù)中聲明了testDay對象2.數(shù)據(jù)成員均為私有那么不能通過tesDay.day=<數(shù)值>的方法來設(shè)置題目中給出了voidsetDay(int)voidsetMonth(int)和voidsetYear(int)三個成員函數(shù)去是指daymonth和year的值還有一個voidprintDate()來輸出分析:1.題目中Date類的數(shù)據(jù)成員為day,month,year且均為整型訪問屬性為私有主函數(shù)中聲明了testDay對象2.數(shù)據(jù)成員均為私有那么不能通過tesDay.day=<數(shù)值>的方法來設(shè)置題目中給出了voidsetDay(int)voidsetMonth(int)和voidsetYear(int)三個成員函數(shù)去是指daymonth和year的值還有一個voidprintDate()來輸出3.準(zhǔn)備工作結(jié)束開始編程看程序僅差4個成員函數(shù)未定義類外定義要寫出作用域即該函數(shù)屬于哪個類:格式:返回值類型作用域::函數(shù)名參數(shù)表voidDate::setDay(intd)/*定義時必須要給形參一個名字這里給的是*/d{day=d}//設(shè)置了day的值其他函數(shù)依此類推輸出函數(shù)就不用再嘮叨了4.驗證結(jié)果出現(xiàn)溢出數(shù)據(jù)時查看是否寫反了例如寫成d=day了解設(shè)置函數(shù)的作用機(jī)制見附二 voidsetMonth(int);//設(shè)置月的值 voidsetYear(int);//設(shè)置年的值private: intday,month,year;};intmain(){ DatetestDay; testDay.setDay(5); testDay.setMonth(10); testDay.setYear(2023); testDay.printDate();};voidDate::setDay(intd){day=d;}voidDate::setMonth(intm){month=m;}voidDate::setYear(inty){year=y;}voidDate::printDate(){cout<<year<<"/"<<month<<"/"<<day<<endl;}3. 下面是一個計算器類的定義,請完成該類的成員函數(shù)的實現(xiàn),并設(shè)計一個主函數(shù)使用該類和相關(guān)成員函數(shù)以測試該類設(shè)計的正確性。#include<iostream>usingnamespacestd;classcounter{public: counter(intnumber=0) //構(gòu)造函數(shù) { value=number; }voidincrement(); //給value原值加1 voiddecrement(); //給value原值減1 intgetvalue(); //取得計數(shù)器值 intprint(); //顯示計數(shù)private: intvalue; //數(shù)據(jù)成員};voidcounter::increment(){value++;cout<<"Thecounterhasincreasedby1"<<endl;}//〔其中的cout語句可以不寫〕voidcounter::decrement(){value--;cout<<"Thecounterhasdecreasedby1"<<endl;}intcounter::getvalue(){returnvalue;}intcounter::print(){cout<<"\nDisplay:"<<getvalue()<<endl<<endl;return0;}intmain(){ cout<<"Pleaseinputoriginnumber:"; //定義counter類的幾個對象并調(diào)用有關(guān)成員函數(shù) inta; cin>>a; counterc(a);//輸入a并將a作為參數(shù)通過構(gòu)造函數(shù)為對象中的value賦值 c.increment(); c.print(); //題目要求驗證所以使用輸出函數(shù)一次驗證value的值 c.decrement(); c.print(); return0; }4.定義一個類ClsName,要求該類設(shè)計如下:〔1〕該類有兩個整型數(shù)據(jù)成員x和y;〔2〕為該類重載三個不同的構(gòu)造函數(shù):分別為無參數(shù)、帶一個參數(shù)和帶兩個參數(shù)的構(gòu)造函數(shù),要求在構(gòu)造函數(shù)中輸出必要的信息以示區(qū)別;〔3〕設(shè)計2個成員函數(shù)用來讀取數(shù)據(jù)成員x和y;〔4〕設(shè)計2個成員函數(shù)用來設(shè)置數(shù)據(jù)成員x和y;〔5〕設(shè)計1個成員函數(shù)用來在屏幕上打印輸出數(shù)據(jù)成員x和y;〔6〕在main〔〕函數(shù)中用三個不同的構(gòu)造函數(shù)創(chuàng)立3個對象,并使用所有的成員函數(shù)對這些對象進(jìn)行必要的操作。classClsName{public: inta,b; ClsName(inta,intb){cout<<"Constructbytwonumbers."<<endl;x=a,y=b;} //以下三個(2)中要求的重載構(gòu)造函數(shù) ClsName(inta){cout<<"Constructby1number."<<endl;x=a,y=b;}//題目要求加以區(qū)別,所以cout輸出不同內(nèi)容加以區(qū)分 ClsName(void){cout<<"Constructwithoutanumber."<<endl;x=a,y=b;} intgetx(){returnx;}因為x,y的訪問屬性為私有,不能由主函數(shù)直接訪問所以會設(shè)置讀取函數(shù)專門負(fù)責(zé)返回相應(yīng)的值重載:函數(shù)名相同,參數(shù)的類型不同或者個數(shù)不同、或者都不同。即根據(jù)帶入?yún)?shù)的類型、數(shù)量的不同,來實現(xiàn)不同的功能 intgety(){returny;}重載:函數(shù)名相同,參數(shù)的類型不同或者個數(shù)不同、或者都不同。即根據(jù)帶入?yún)?shù)的類型、數(shù)量的不同,來實現(xiàn)不同的功能 voidsetx(){cout<<"ChangeX:";cin>>x;} voidsety(){cout<<"ChangeY:";cin>>y;} voidprint(){cout<<"X="<<getx()<<'\t'<<"Y="<<gety()<<endl;}private: intx,y;〔1〕中要求的兩個整型數(shù)據(jù)成員};intmain(){ inta,b; cout<<"Test1:Inputwith2numbers,nowpleaseinputtwonumbers:"<<endl; cin>>a;cin>>b; ClsNamet1(a,b); t1.print(); t1.setx();t1.sety(); t1.print(); cout<<"\nTest2:Inputwithanumbers,nowpleaseinputanumber:"; cin>>a; ClsNamet2(a); t2.print(); t2.setx();t2.sety(); t2.print(); cout<<"\nTest3:Withoutnumbers"; ClsNamet3; t3.print(); t3.setx();t3.sety(); t3.print(); return0;5. 建立類cylinder,包括兩個數(shù)據(jù)成員radius和height,分別表示圓柱體的半徑和高度,cylinder類的構(gòu)造函數(shù)被傳遞了兩個double值來初始化這兩個成員;定義成員函數(shù)area()和volume用來求圓柱體的外表積和體積,定義成員函數(shù)print()打印cylinder類的相關(guān)信息。最后,在主函數(shù)中對cylinder類的設(shè)計進(jìn)行測試。這題很簡單沒啥說的#include<iostream.h>classcylinder{public: voidset(doubler,doubleh){radius=r,height=h;} doublearea(){return(radius*3.14);} doublevolume(){return(height*area());} voidprint(){cout<<"Area="<<area()<<'\t'<<"Volume="<<volume()<<endl;}private: doubleradius,height;};intmain(){ inta,b; cylinderv; cout<<"Radius="; cin>>a; cout<<"Height="; cin>>b; v.set(a,b); v.print(); return0;}6.定義一個學(xué)生類CStudent實現(xiàn)簡單的學(xué)籍管理功能,要求該類至少實現(xiàn)以下功能:(1)錄入學(xué)生的根本信息(包括姓名,學(xué)號,性別,年齡,專業(yè),入學(xué)時間,各門功課成績)(2)輸出學(xué)生的根本信息(3)選課〔輸入時間和所選的課程〕(4)統(tǒng)計每門課的學(xué)分績點(diǎn)(5)統(tǒng)計每學(xué)期的平均學(xué)分績點(diǎn)(6)統(tǒng)計重考科目(7)統(tǒng)計重修科目#include<iostream>#include<string>usingnamespacestd;constMAX=4;classCStudent{ stringname,sex,ID,object,jtime;//分別存儲姓名性別學(xué)號專業(yè)入學(xué)時間 intage; //存儲年齡 intmark[MAX]; //設(shè)立一個數(shù)組存放成績 stringsbj[MAX]; //設(shè)立string數(shù)組來存放科目名稱 intretry,redo; //統(tǒng)計重考重修數(shù)量 stringt_chose,s_chose; //存放選課時間和選課名稱 intm_point[MAX],m_mark[MAX]; //存放每門功課的學(xué)分和績點(diǎn) intmarker[MAX]; //存放重修科目的角標(biāo)〔有時不止掛掉一科可能會很多所以聲明稱數(shù)組〕為什么建立數(shù)據(jù)時使用的數(shù)組?通過對角標(biāo)的控制便可以把一行數(shù)據(jù)全部對應(yīng)起來為什么建立數(shù)據(jù)時使用的數(shù)組?通過對角標(biāo)的控制便可以把一行數(shù)據(jù)全部對應(yīng)起來請看下面數(shù)據(jù)對應(yīng)關(guān)系:角標(biāo)科目名稱(sbj[i])成績(mark[i])學(xué)分(m_mark[i])0數(shù)學(xué)4461C語言9262英語724便于統(tǒng)計也可以方便地調(diào)用出一門科目的全部內(nèi)容public: CStudent() { cout<<"構(gòu)造CStudent開始錄入根本信息"<<endl; cout<<"Name:";cin>>name; cout<<"ID:";cin>>ID; cout<<"Sex:";cin>>sex; cout<<"Age:";cin>>age; cout<<"YourObject:";cin>>object; cout<<"Timeyoujointhecolleage:";cin>>jtime; cout<<"Nowpleaseinputyourmarks."<<endl; for(inti=0;i<MAX;i++) { cout<<"Subjectname:";cin>>sbj[i]; cout<<"Mark:";cin>>mark[i]; } } voidbaseprint() //按(2)要求輸出根本信息 { cout<<"根本信息:"<<endl; cout<<"學(xué)生姓名:"<<name<<"\t學(xué)號:"<<ID<<"\t年齡:"<<age<<"\t性別"<<sex<<endl; cout<<"入學(xué)時間:"<<jtime<<"\t專業(yè):"<<object<<endl; cout<<"成績:"<<endl; for(inti=0;i<MAX;i++) { cout<<sbj[i]<<":"<<mark[i]<<"\t"; } cout<<endl; } voidchose() //按(3)要求設(shè)置選課函數(shù) { cout<<"選課名稱:";cin>>s_chose; cout<<"選課時間:";cin>>t_chose; } voidPoint() //按(4)要求 { for(inti=0;i<MAX;i++) { cout<<"請設(shè)置"<<sbj[i]<<"的學(xué)分:";cin>>m_mark[i]; } cout<<endl; cout<<endl; intscore=0,j=0; //給score賦初值防止溢出因為后面有score+=...相當(dāng)于score=score+...無法確定第一個score的值 retry=0; for(i=0;i<MAX;i++) { if(mark[i]>=60)score+=m_mark[i]; //成績及格壘加學(xué)分 else{retry++;marker[j++]=i;} //否那么不及格便要重考將重考數(shù)量自增 } //其中marker[j++]=i是將當(dāng)時重修科目的角標(biāo)記錄下來 floats=0; for(i=0;i<MAX;i++){ if(m_mark==0){m_point[i]=0;cout<<sbj[i]<<"學(xué)分績點(diǎn)均為0"<<endl;continue;} float(m_point[i]=4-(100-(float)mark[i])*(100-(float)mark[i])/1600);//績點(diǎn)的計算方法 s+=m_point[i]; cout<<sbj[i]<<"所獲學(xué)分:"<<m_mark[i]<<"\t績點(diǎn):"<<m_point[i]<<endl; } cout<<"平均績點(diǎn)為:"<<s/MAX<<endl; cout<<endl; } voidcheck() { if(retry==0)cout<<"無重考科目"; else { cout<<"重考數(shù)目為:"<<retry<<"包括"<<endl; for(inti=0;i<retry;i++)cout<<sbj[marker[i]]<<"\t"; cout<<endl; redo=0; cout<<endl; inttemp,j=0; cout<<"輸入重考分?jǐn)?shù)"<<endl; for(i=0;i<retry;i++) { cout<<sbj[marker[i]]<<":";cin>>temp; if(temp<60) { redo++; marker2[j++]=marker[i]; } } cout<<endl; if(redo==0)cout<<"無重修科目"; else { cout<<"重修數(shù)目為:"<<redo<<"包括"<<endl; for(i=0;i<redo;i++)cout<<sbj[marker2[i]]<<"\t"; cout<<endl; } } }};intmain(void){ CStudenta; a.baseprint(); a.chose(); a.Point(); a.check(); return0;}注意:〔1〕新設(shè)計的類中所需要的數(shù)據(jù)成員需要根據(jù)所要實現(xiàn)的功能自行設(shè)計;〔2〕用一個演示程序完成對所設(shè)計的新類的功能測試,并給出測試數(shù)據(jù)和實驗結(jié)果;〔3〕為增加程序可讀性,請在程序中對類成員進(jìn)行適當(dāng)注釋說明;補(bǔ)充實驗題: 〔1〕教材134頁【3.33】-【3.36】實驗二〔2010-3-23〕實驗名稱:復(fù)雜形式的對象。實驗?zāi)康模骸?〕掌握對象數(shù)組、對象指針和string類的使用方法; 把對象想象成一種數(shù)據(jù)類型比方整型有整型數(shù)組吧〔inta[10]〕自然也有對象數(shù)組 對象指針以以上類似有時涉及到動態(tài)聯(lián)編〔〕String類不如說是string類型類似于智能化的字符串?dāng)?shù)組〔2〕掌握對象數(shù)組、對象指針和對象引用作為函數(shù)參數(shù)的使用方法; 主要看書實際用的不多注意對象數(shù)組初始化方法〔書P77中上的說明〕〔3〕掌握類對象作為成員的使用方法; 了解就行〔4〕掌握友元的概念和使用方法; 通常的,通過A對象想要訪問B對象的私有成員是不可能的而通過友元就可以做到 需要注意的是友元函數(shù)雖然在類內(nèi)聲明但是友元函數(shù)不是成員函數(shù)獨(dú)立于類外所以類外定義是不能加作用域“::〞 另外,由于使用的VisualC++6.0不是完全使用C++標(biāo)準(zhǔn)編程時如果遇到報錯內(nèi)容為一堆大寫字母且錯誤位置指向友元函數(shù)的話把#include<iostream>usingnamespacestd;改為#include<iostream.h>還有!只有上述情況才可以把頭文件加上“.h〞,否那么會導(dǎo)致局部功能不正?!?〕掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法; 例如:有Object類,擁有數(shù)據(jù)成員a,由Object類聲明出的對象A、B、C,那么A、B、C都擁有各自的a,內(nèi)存中也會分配出各自的內(nèi)存空間A::a,B::a,C::a〔共3個〕。而如果將數(shù)據(jù)成員a聲明為靜態(tài)成員〔static〕,那么A、B、C那么共用一個內(nèi)存空間a〔只有1個〕最典型的例子是統(tǒng)計聲明對象的數(shù)量使用方法:static數(shù)據(jù)類型數(shù)據(jù)成員名由于不能直接對數(shù)據(jù)成員賦初值所以靜態(tài)數(shù)據(jù)成員初始化方法為:數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=初值〔注意:1.是類名,不是對象名;2.之前不要加static〕靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)屬于整個類而不是某個對象所以調(diào)用方法為類名::靜態(tài)成員函數(shù)名(參數(shù)表)其他參看書P103幾點(diǎn)說明練習(xí)工程Time類的框架定義如下:#include<iostream.h>classTime //聲明Time類{public: Time(intA=0,intB=0,intC=0)//帶默認(rèn)參數(shù)的構(gòu)造函數(shù) { hour=A; minute=B; second=C; } //setfunctions voidsetTime(inta,intb,intc) //設(shè)置hour,minute,second { cout<<"RunSetimeFunction"<<endl; setHour(a); setMinute(b); setSecond(c); }voidsetHour(inta)//設(shè)置hour(確保數(shù)據(jù)在合理范圍) { for(;;) { if(a>=24||a<0) { cout<<"小時輸入錯誤再來一次"<<endl; cin>>a; } else{break;} } hour=a; }voidsetMinute(inta) //設(shè)置minute(確保數(shù)據(jù)在合理范圍) { for(;;) { if(a>=60||a<0) { cout<<"\n分鐘輸入錯誤再來一次"<<endl; cin>>a; } else{break;} } minute=a; }voidsetSecond(inta) //設(shè)置second(確保數(shù)據(jù)在合理范圍) { for(;;) { if(a>=60||a<0) { cout<<"秒輸入錯誤再來一次"<<endl; cin>>a; } else {break;} } second=a; }//getfunctionsintgetHour()//返回hour { returnhour; }intgetMinute()//返回minute { returnminute; }intgetSecond()//返回second { returnsecond; }voidprintUniversal()//按24小時格式輸出時間:23:56:12 { cout<<getHour()<<":"<<getMinute()<<":"<<getSecond()<<endl; } voidprintStandard()//按12小時格式輸出時間:11:56:12(PM)或9:23:55(AM) {if(hour>12) cout<<(hour-12)<<":"<<minute<<":"<<second<<"(PM)"<<endl; else cout<<hour<<":"<<minute<<":"<<second<<"(AM)"<<endl; }private: inthour; //0-23(24小時格式) intminute;//0-59 intsecond;//0-59};//Timel類定義結(jié)束intmain(){ Timet; inta,b,c; cout<<"設(shè)置小時:"; cin>>a; cout<<"設(shè)置分鐘:"; cin>>b; cout<<"設(shè)置秒:"; cin>>c; t.setTime(a,b,c); t.printStandard(); t.printUniversal(); return0;2.設(shè)計一個用來表示直角坐標(biāo)系的Location類,在主程序中創(chuàng)立類Location的兩個對象A和B,要求A的坐標(biāo)在第3象限,B的坐標(biāo)點(diǎn)在第2象限,分別采用成員函數(shù)和友元函數(shù)計算給定兩個坐標(biāo)點(diǎn)之間的距離,要求按如下格式輸出結(jié)果:A〔x1,y1〕,B〔x2,y2〕Distance1=d1Distance2=d2其中:x1,x2,y1,y2為指定的坐標(biāo)值,d1和d2為兩個坐標(biāo)點(diǎn)之間的距離。Location類框架可參考如下:#include<iostream.h>#include<cmath>classLocation //聲明類Location{public: Location(double,double); //構(gòu)造函數(shù) doubleGetx(); //成員函數(shù),取x坐標(biāo)的值 doubleGety(); //成員函數(shù),取y坐標(biāo)的值 doubledistance1(Location&);//成員函數(shù),求兩坐標(biāo)點(diǎn)之間的距離frienddoubledistance2(Location&A,Location&B)//友元函數(shù),求兩坐標(biāo)點(diǎn)之間的距離 { returnsqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); }~Location(void){cout<<"Destrcted..";}private: doublex,y;};Location::Location(doublea,doubleb){ x=a; y=b;}doubleLocation::Getx(){ returnx;}doubleLocation::Gety(){ returny;}doubleLocation::distance1(Location&L){ returnsqrt((L.x-x)*(L.x-x)+(L.y-y)*(L.y-y));}intmain(){ doublea,b; cout<<"輸入A點(diǎn)坐標(biāo)〔在第二象限〕:"<<endl; cout<<"x(x<0):"; for(;;) { cin>>a; if(a<0)break; cout<<"不對,再來一次:"; } cout<<"y(y>0):"; for(;;) { cin>>b; if(b>0)break; cout<<"不對,再來一次:"; } LocationA(a,b); cout<<"輸入B點(diǎn)坐標(biāo)〔在第四象限〕:"<<endl; cout<<"x(x>0):"; for(;;) { cin>>a; if(a>0)break; cout<<"不對,再來一次:"; } cout<<"y(y<0):"; for(;;) { cin>>b; if(b<0)break; cout<<"不對,再來一次:"; } LocationB(a,b); cout<<"A("<<A.Getx()<<","<<A.Gety()<<")"<<endl; cout<<"B("<<B.Getx()<<","<<B.Gety()<<")"<<endl;1(B)<<endl; cout<<"Distance2="<<distance2(A,B)<<endl; return0;}3.使用C++的string類,將5個字符串按逆轉(zhuǎn)后的順序顯示出來。例如,逆轉(zhuǎn)前的5個字符串是:Germany逆轉(zhuǎn)后的順序輸出字符串是:France#include<iostream>#include<string>usingnamespacestd;intmain(void){ stringstr1,str2,str3,str4,str5; cin>>str1>>str2>>str3>>str4>>str5; cout<<str5<<""<<str4<<""<<str3<<""<<str2<<""<<str1<<endl; return0;}4.設(shè)計一個模仿類magic來實現(xiàn)4*4的魔方陣。類的框架如下:#include<iostream>usingnamespacestd;classmagic //聲明魔方陣類magic{public: voidgetdata(); //輸入初值成員函數(shù) voidsetfirstmagic(); //設(shè)置初始魔方成員函數(shù) intgenerate(); //生成最終魔方成員函數(shù) intprintmagic(); //顯示魔方成員函數(shù)private: intm[4][4]; intstep; intfirst; intsumj;};voidmagic::getdata(){ cout<<"first=";cin>>first; cout<<"step=";cin>>step;}voidmagic::setfirstmagic(){ inttemp; temp=m[0][0]=first; for(inti=0,j=0;i<4;i++) for(j=0;j<4;j++) { if(i==0&&j==0)continue; temp+=step; m[i][j]=temp; } sumj=m[0][0]+m[3][3];}intmagic::generate(){ inti,j; for(i=0,j=3;i<4;i++,j--) { m[i][j]=sumj-m[i][j]; m[i][i]=sumj-m[i][i]; } return0;}intmagic::printmagic(){ cout<<endl; for(inti=0,j;i<4;i++) { for(j=0;j<4;j++) cout<<m[i][j]<<"\t"; cout<<endl; } return0;} intmain(void){ magicm; m.getdata(); m.setfirstmagic(); m.generate(); m.printmagic(); return0;}所謂4*4的魔方陣,是指該矩陣的各行值的和等于各列值的和,并等于兩對角線值的和,如:,其各行、各列以及對角線值的和都是64。求4*4的魔方陣的一般步驟提示如下:設(shè)置初始魔方的起始值和相鄰元素之間的差值。例如上述魔方陣的初始魔方的起始值和相鄰元素之間的差值分別為:first=1,step=2設(shè)置初始魔方元素的值。例如上述魔方的初始魔方陣為:生成最終魔方陣。方法如下:eq\o\ac(○,1)求最大元素和最小元素的和sum,本例為1+31=32。eq\o\ac(○,2)用32減去初始魔方陣所有對角線上元素的值,然后將結(jié)果放在原來的位置,即可求得最終的魔方陣。本例最終魔方陣為:編寫主程序,測試所設(shè)計的魔方類的正確性.5.聲明一個Employee類,數(shù)據(jù)成員包括:一個long型的id,兩個字符指針成員,代表職員的姓名和家庭住址,一個double數(shù)據(jù),代表月薪。成員函數(shù)有:構(gòu)造函數(shù)、析構(gòu)函數(shù)、set_salary()和get_salary()代表修改和獲取薪資、set_name()和get_name()代表修改和獲取姓名、set_address()和get_address()代表修改和獲取家庭住址,set_id()和get_id()用來修改獲取當(dāng)前職員的id號。在主程序中,創(chuàng)立對象數(shù)組調(diào)用上述函數(shù)以測試Employee類設(shè)計的正確性。Employee類的框架可參考:#include<iostream>#include<string>usingnamespacestd;classEmployee //聲明Employee類{public: Employee(long=0,char*="000",char*="000",double=0);//構(gòu)造函數(shù) ~Employee(); //析構(gòu)函數(shù) //setfunctions voidset_id(long); //設(shè)置id voidset_salary(double); //設(shè)置salaryvoidset_name(char*); //設(shè)置namevoidset_address(char*); //設(shè)置adress//getfunctions longget_id(); //返回iddoubleget_salary(); //返回salarychar*get_name(); //返回namechar*get_addressSecond(); //返回addressvoidprint(); //打印輸出Employee的相關(guān)信息private:longid; //工號char*name; //姓名char*address; //家庭住址doublesalary; //月薪};//Employee類聲明結(jié)束Employee::Employee(long,char*,char*,double){ name=newchar; address=newchar;}voidEmployee::set_address(char*q){ address=q;}voidEmployee::set_id(longa){ id=a;}voidEmployee::set_name(char*z){ name=z;}voidEmployee::set_salary(doublea){ salary=a;}longEmployee::get_id(){ returnid;}doubleEmployee::get_salary(){ returnsalary;}char*Employee::get_name(){ returnname;}char*Employee::get_addressSecond() //返回address{ returnaddress;}Employee::~Employee(){}voidEmployee::print(){ cout<<"======================================================="<<endl; cout<<"\tID"<<get_id()<<"\t\t"<<"姓名::"<<get_name()<<"\n\t月薪:"<<get_salary()<<endl; cout<<"\t住址:"<<get_addressSecond()<<endl;}intmain(void){ cout<<"輸入要統(tǒng)計的員工數(shù)量:"; inti;cin>>i; intj=0,a; doubleb; cout<<"\n\n\n\t\t\t\t===錄入信息==="<<endl; Employees[1000]; char*p; for(;j<i;j++) { cout<<"\n輸入員工ID:"; cin>>a; s[j].set_id(a); p=newchar[1000]; cout<<"員工姓名:";cin>>p; s[j].set_name(p); p=newchar[1000]; cout<<"員工住址:";cin>>p; s[j].set_address(p); cout<<"輸入員工工資:"; cin>>b; s[j].set_salary(b); } for(j=0;j<i;j++) s[j].print(); return0;}6.聲明一個Student類,在該類中包括一個數(shù)據(jù)成員:score〔代表課程成績〕、兩個靜態(tài)數(shù)據(jù)成員:total_score〔代表總分〕,count〔代表學(xué)生總?cè)藬?shù)〕。成員函數(shù)有:構(gòu)造函數(shù)、析構(gòu)函數(shù)、account〔int〕用于設(shè)置分?jǐn)?shù)、靜態(tài)成員函數(shù)sum()返回所有學(xué)生的總成績、靜態(tài)成員函數(shù)average()返回所有學(xué)生的平均成績、print()用于打印當(dāng)前學(xué)生對象的成績等。在主程序中,輸入某班同學(xué)的成績,并調(diào)用上述函數(shù)打印全班同學(xué)的成績、求出全班學(xué)生的成績之和與平均分等。Student類的框架可參考:#include<iostream>#include<string>usingnamespacestd;classStudent //聲明Student類{public: Student(int=0); //構(gòu)造函數(shù) ~Student(); //析構(gòu)函數(shù) voidaccount(int); //設(shè)置分?jǐn)?shù) staticintsum(); //返回總成績 staticdoubleaverage();//返回平均成績 voidprint2(); // 打印輸出Student的平均成績和總成績voidprint(); // 打印輸出Student的相關(guān)信息private:intscore; //分staticinttotal_score; //總分staticintcount; //人數(shù)};//Student類聲Student::Student(int){ score=0;}Student::~Student(){}voidStudent::account(inta){ score=a; total_score+=score; count++;}intStudent::sum(){ returnStudent::total_score;}doubleStudent::average(){ returnStudent::total_score/double(Student::count);}voidStudent::print(){ cout<<score<<"\t";}voidStudent::print2(){ cout<<"\n全班統(tǒng)計:\n總成績:"<<Student::sum()<<"\n平均成績:"<<Student::average()<<endl;}intStudent::count=0;intStudent::total_score=0;intmain(void){ inti=0,a; Students[100]; cout<<"開始錄入成績,輸入-1結(jié)束"<<endl; while(i>=0) { cin>>a; if(a<0) { cout<<"成績錄入結(jié)束"<<endl;break; } s[i++].account(a); } cout<<"輸出全班成績:"<<endl; intj=1; while(i>0) { s[--i].print(); if(j++%6==0)cout<<endl; } s[0].print2(); return0;}注意:靜態(tài)成員和非靜態(tài)成員的初始化方式的區(qū)別。實驗三派生與繼承〔2010-3-23〕實驗名稱:派生與繼承。實驗?zāi)康模豪斫饫^承的含義,掌握派生類的定義方法和實現(xiàn);繼承就是子承父類看書注意格式私有成員不能繼承父類的保護(hù)成員繼承成變?yōu)樽宇惖乃接谐蓡T理解公有繼承下基類成員對派生類成員和派生類對象的可見性,能正確地訪問繼承層次中的各種類成員;理解保護(hù)成員在繼承中的作用,能夠在適當(dāng)?shù)臅r候選擇使用保護(hù)成員以便派生類成員可以訪問基類的局部非公開的成員;理解虛函數(shù)在類的繼承層次中的作用,虛函數(shù)的引入對程序運(yùn)行時的影響,能夠?qū)κ褂锰摵瘮?shù)的簡單程序?qū)懗龀绦蚪Y(jié)果。練習(xí)工程“點(diǎn)〞類Point,再由“點(diǎn)〞類派生出“圓〞類Circle。#include<iostream.h>classPoint//定義“點(diǎn)〞類{ intx,y;public: Point(inta=0,intb=0) { x=a;y=b; } voidShowPoint() { cout<<"Point:("<<x<<','<<y<<")\n"; } intGetx() { returnx;} intGety() { returny; } voidSetxy(inta,intb) { x=a;y=b; }};classCircle:publicPoint//定義“圓〞類,公有繼承{ intr;//“圓〞的半徑public: Circle(intx,inty,intra):Point(x,y)//B { r=ra; } voidSetr(intra) { r=ra;} doubleArea()//求圓的面積 { returnPI*r*r; } voidMove(intx_offset,inty_offset)//將圓心坐標(biāo)平移 { intx1=Getx();//存取基類的私有成員 inty1=Gety();//D x1+=x_offset;y1+=y_offset;Setxy(x1,y1);//E } voidShowCircle() { ShowPoint();//F cout<<"Radius:"<<r<<'\t'; cout<<"Area:"<<Area()<<endl;//G }};voidmain(){ Circlec(1,1,1); c.ShowCircle(); c.Move(1,2); c.ShowCircle();c.Setxy(4,5);//重新置圓心坐標(biāo) c.Setr(2);//重新置半徑值 c.ShowCircle();}記錄程序的運(yùn)行結(jié)果測試能否將move函數(shù)體改寫為x=x+x_offset;y=y+y_offset; 運(yùn)行結(jié)果略1(2)不能改寫派生類不能直接訪問基類的私有成員2:先定義“點(diǎn)〞類Point和“半徑〞類Radius,再由Point類和Radius類多重派生出“圓〞類Circle。#include<iostream.h>classPoint{protected://A intx,y;public: Point(inta=0,intb=0){x=a;y=b;} voidShowPoint(){cout<<"Point:("<<x<<','<<y<<")\n";} intGetx(){returnx;} intGety(){returny;} voidSetxy(inta,intb){x=a;y=b;}};classRadius{protected://B intr;public: Radius(intra=0){r=ra;} voidSetr(intra){r=ra;} intGetr() {returnr;}};classCircle:publicPoint,publicRadius{public: Circle(intx,inty,intra):Point(x,y),Radius(ra)//D {}doubleArea() {returnPI*r*r;}//直接訪問基類的保護(hù)成員voidMove(intx_offset,inty_offset) {x+=x_offset;y+=y_offset;}voidShowCircle() { ShowPoint(); cout<<"Radius:"<<r<<'\t'; cout<<"Area:"<<Area()<<endl; }};voidmain(){ Circlec(1,1,1); c.ShowCircle(); c.Move(1,2); c.ShowCircle(); c.Setxy(4,5); c.Setr(2); c.ShowCircle();}記錄程序的運(yùn)行結(jié)果運(yùn)行結(jié)果略為什么可以直接使用x,y,基類的數(shù)據(jù)成員x,y為保護(hù)數(shù)據(jù)成員相當(dāng)于派生類的私有數(shù)據(jù)成員可以被派生類的成員函數(shù)訪問如果x,y在基類中是私有的行嗎?私有那么不能被訪問3.多重繼承中基類構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序#include<iostream.h>classBase1{protected: intdata1;public: Base1(inta=0) { data1=a; cout<<"BaseConstructor1\n"; } ~Base1() { cout<<"BaseDestructor1\n";}};classBase2{protected: intdata2;public: Base2(inta=0) { data2=a; cout<<"BaseConstructor2\n"; } ~Base2() { cout<<"BaseDestructor2\n";}};classDerived:publicBase1,publicBase2{ intd;public: Derived(intx,inty,intz):Base1(x),Base2(y) {d=z; cout<<"DerivedConstructor\n"; } ~Derived() {cout<<"DerivedDestructor\n";} voidShow() {cout<<data1<<','<<data2<<','<<d<<endl;}};voidmain(){ Derivedc(1,2,3); c.Show();}記錄程序的運(yùn)行結(jié)果運(yùn)行結(jié)果:BaseConstructor1BaseConstructor2DerivedConstructor1,2,3DerivedDestructorBaseDestructor2BaseDestructor1Pressanykeytocontinue要求記住調(diào)用順序#include<iostream.h>classBase1{protected: intdata1;public: Base1(inta=8){ data1=a; cout<<data1<<",BaseConstructor1\n"; } ~Base1() { cout<<data1<<",BaseDestructor1\n"; }};classBase2{protected:intdata2;public: Base2(inta=9) { data2=a; cout<<data2<<",BaseConstructor2\n"; } ~Base2() { cout<<data2<<",BaseDestructor2\n"; }};classDerived:publicBase1,publicBase2{ intd; Base1b1,b2;public:Derived(intx,inty,intz):Base1(x),Base2(y),b1(x+y),b2(x+z) { d=z;cout<<"DerivedConstructor\n"; } ~Derived() { cout<<"DerivedDestructor\n"; } voidShow() { cout<<data1<<','<<data2<<','<<d<<endl; }};voidmain(){ Derivedc(1,2,3); c.Show();}記錄程序的運(yùn)行結(jié)果1,BaseConstructor12,BaseConstructor23,BaseConstructor14,BaseConstructor1DerivedConstructor1,2,3DerivedDestructor4,BaseDestructor13,BaseDestructor12,BaseDestructor21,BaseDestructor1Pressanykeytocontinue5.編程題假設(shè)某商店有如下幾種貨品:襯衣、帽子、立柜。每一種貨物都有與其關(guān)聯(lián)的說明信息。襯衣:單價、產(chǎn)地、庫存量、布料;帽子:單價、產(chǎn)地、庫存量、布料、樣式〔平頂或尖頂〕;立柜:單價、產(chǎn)地、庫存量、木料、顏色。對這些商品的操作有:商品的進(jìn)庫〔增加庫存量〕,商品的出庫〔減少庫存量〕,該類貨品總價格的計算。要求自行設(shè)計數(shù)據(jù)結(jié)構(gòu),用類的繼承與派生關(guān)系將上述的各種貨品表示出來,并使用類的構(gòu)造函數(shù)來初始化每一類對象的初始數(shù)據(jù)。而后將上述的商品管理計算機(jī)化,完成操作要求的功能?!緦崿F(xiàn)方法提示】1.設(shè)立3個不同的類來描述與處理3種不同的貨品。首先注意到上述3種貨品數(shù)據(jù)之間的相互關(guān)聯(lián)關(guān)系,可使用C++基類及其派生類的定義方法,先抽象出〔“提取〞出〕如下每一貨品都具有的“公有〞數(shù)據(jù)構(gòu)成一個所謂的基類base,而后再派生出所需的那3個類?!?〕base〔基〕類:單價、產(chǎn)地、庫存量;〔2〕由base作為基類,派生出shirt〔襯衣〕類:增加“布料〞數(shù)據(jù);〔3〕由base出發(fā),派生出wardrobe〔立柜〕類:增加“木料〞與“顏色〞數(shù)據(jù);〔4〕而后又由shirt類出發(fā)〔作為基類〕,派生出cap〔帽子〕類:增加“樣式〞數(shù)據(jù)。2.對應(yīng)于要對各類數(shù)據(jù)所進(jìn)行的操作,而設(shè)立出類的如下幾個成員函數(shù)。〔1〕構(gòu)造函數(shù)通過傳遞來的實參數(shù)據(jù),來構(gòu)造出每一對象所具有的各數(shù)據(jù)成員。如基類base需要傳遞place、count與price三項數(shù)據(jù),而派生類shirt那么需在base數(shù)據(jù)的根底上增加第四項即布料數(shù)據(jù)material等?!?〕商品的進(jìn)庫〔增加庫存量〕voidin_something(intadd_cnt);將對象的庫存量count增加一個數(shù)量add_cnt?!?〕商品的出庫〔減少庫存量〕voidout_something(intdel_cnt);將對象的庫存量count減少一個數(shù)量del_cnt?!?〕該類貨品總價格的計算doubletotal_price();通過使用“price*count〞計算并返回對象所代表貨品的總價格?!?〕對象數(shù)據(jù)的輸出。在屏幕上顯示出對象所擁有的當(dāng)前數(shù)據(jù)。代碼:#include<iostream>#include<string>usingnamespacestd;classbase{protected: stringplace; intcount; doubleprice;public: base(stringpl,doublepr,intc); voidin_something(intadd_cnt); voidout_something(intdel_cnt);};classwardrobe:publicbase{ stringcolor; stringwood;public: wardrobe(stringpl,doublepr,intc,stringco,stringwo):base(pl,pr,c) { color=co; wood=wo; } voidprint();};classshirt:publicbase{protected: stringmaterial;public: shirt(stringpl,doublepr,intc,stringma):base(pl,pr,c) { material=ma; } voidprint();};classcap:publicshirt{ stringstyle;public: cap(stringpl,doublepr,intc,stringma,stringst):shirt(pl,pr,c,ma) { style=st; } voidprint();};base::base(stringpl,doublepr,intc){ place=pl; price=pr; count=c;}voidbase::in_something(intadd_cnt){ count+=add_cnt; }voidbase::out_something(intdel_cnt){ count-=del_cnt; if(count<0)count=0;}voidshirt::print(){ cout<<"襯衣\t產(chǎn)地:"<<place<<"\t布料:"<<material<<"\n單價:"<<price<<"\t數(shù)量:"<<count<<"\t總價:"<<price*count<<endl;}voidcap::print() { cout<<"帽子\t產(chǎn)地:"<<place<<"\t布料:"<<material<<"\t樣式:"<<style<<"\n單價:"<<price<<"\t數(shù)量:"<<count<<"\t總價:"<<price*count<<endl;}voidwardrobe::print() { cout<<"立柜\t產(chǎn)地:"<<place<<"\t顏色:"<<color<<"\t木料:"<<wood<<"\n單價:"<<price<<"\t數(shù)量:"<<count<<"\t總價:"<<price*count<<endl;}intmain(void){ shirts("廣州",55.8,20,"棉"); capc("蘇州",23.5,30,"帆布","A"); wardrobew("福建",1200,10,"紅色","樟木"); stringa; cout<<"有如下商品:"<<endl; s.print(); c.print(); w.print(); inttemp; while(a!="0") { cout<<"輸入相應(yīng)物品進(jìn)行相應(yīng)操作〔襯衣:s帽子:c立柜:w結(jié)束:0〕"<<endl; cin>>a; if(a=="s"){ cout<<"+為入庫-為出庫?為查詢";cin>>a; if(a=="+"){cout<<"入庫數(shù)量:";cin>>temp;s.in_something(temp);} if(a=="-"){cout<<"出庫數(shù)量:";cin>>temp;s.out_something(temp);} if(a=="?")s.print(); } elseif(a=="c"){ cout<<"+為入庫-為出庫?為查詢";cin>>a; if(a=="+"){cout<<"入庫數(shù)量:";cin>>temp;c.in_something(temp);} if(a=="-"){cout<<"出庫數(shù)量:";cin>>temp;c.out_something(temp);} if(a=="?")c.print(); } elseif(a=="w"){ cout<<"+為入庫-為出庫?為查詢";cin>>a; if(a=="+"){cout<<"入庫數(shù)量:";cin>>temp;w.in_something(temp);} if(a=="-"){cout<<"出庫數(shù)量:";cin>>temp;w.out_something(temp);} if(a=="?")w.print(); } elseif(a=="0"){s.print();c.print();w.print();} elsecout<<"有誤重新"; } return0;}運(yùn)行結(jié)果:有如下商品:襯衣產(chǎn)地:廣州布料:棉單價:55.8數(shù)量:20總價:1116帽子產(chǎn)地:蘇州布料:帆布樣式:A單價:23.5數(shù)量:30總價:705立柜產(chǎn)地:福建顏色:紅色木料:樟木單價:1200數(shù)量:10總價:12000輸入相應(yīng)物品進(jìn)行相應(yīng)操作〔襯衣:s帽子:c立柜:w結(jié)束:0〕s+為入庫-為出庫?為查詢+入庫數(shù)量:20輸入相應(yīng)物品進(jìn)行相應(yīng)操作〔襯衣:s帽子:c立柜:w結(jié)束:0〕c+為入庫-為出庫?為查詢-出庫數(shù)量:100輸入相應(yīng)物品進(jìn)行相應(yīng)操作〔襯衣:s帽子:c立柜:w結(jié)束:0〕w+為入庫-為出庫?為查詢?立柜產(chǎn)地:福建顏色:紅色木料:樟木單價:1200數(shù)量:10總價:12000輸入相應(yīng)物品進(jìn)行相應(yīng)操作〔襯衣:s帽子:c立柜:w結(jié)束:0〕0襯衣產(chǎn)地:廣州布料:棉單價:55.8數(shù)量:40總價:2232帽子產(chǎn)地:蘇州布料:帆布樣式:A單價:23.5數(shù)量:0總價:0立柜產(chǎn)地:福建顏色:紅色木料:樟木單價:1200數(shù)量:10總價:12000Pressanykeytocontinue實驗四〔2010-4多態(tài)程序設(shè)計實驗?zāi)康模骸?〕掌握運(yùn)算符重載的方法; 運(yùn)算符其實相當(dāng)于一個函數(shù)只不過我們平時使用的是它的隱式形式重載是函數(shù)名不變,帶入函數(shù)的參數(shù)個數(shù)不變,但參數(shù)類型必須改變,返回值類型改變,功能也隨之發(fā)生相應(yīng)變化其實質(zhì)是將函數(shù)功能拓展函數(shù)重載的方法與定義一個函數(shù)的方法幾乎完全相同格式為:返回值類型作用域::重載函數(shù)名〔參數(shù)表〕{函數(shù)定義}注意:類其實也可以看做是一種數(shù)據(jù)類型所以return之后可以返回一個對象〔2〕掌握使用虛函數(shù)實現(xiàn)動態(tài)多態(tài)性; 也叫動態(tài)聯(lián)編是通過指針實現(xiàn)的練習(xí)工程1.定義Point類,有坐標(biāo)x,y兩個成員變量,利用友元函數(shù)對Point類重載“++〞運(yùn)算符,實現(xiàn)對坐標(biāo)值的改變。具體要求如下:編寫程序定義Point類,在類中定義整型的私有成員變量x,y;在類中定義兩個友元函數(shù),分別重載前置++和后置++;編寫主函數(shù)測試。注意函數(shù)有無返回值的區(qū)別,以及返回值是否帶有&應(yīng)用符號。1程序代碼:#include<iostream.h>//usingnamespacestd;classPoint{ intx,y;public: Point(){} Point(int&a,int&b) { x=a,y=b; } friendPointoperator++(Point&c){ inta,b; a=++c.x; b=++c.y; cout<<"->x="<<a<<",y="<<b<<endl; returnc; } friendPointoperator++(Point&c,int){ inta,b; a=c.x++; b=c.y++; cout<<"->x="<<a<<",y="<<b<<endl; returnc; } voidshow() { cout<<"->x="<<x<<",y="<<y<<endl; }};intmain(void){ cout<<"x,y"<<endl; inta,b; cin>>a;cin>>b; Pointob1(a,b); cout<<"Point++";ob1++; cout<<"NowPoint"; ob1.show(); cout<<"++Point";++ob1; cout<<"NowPoint"; ob1.show(); return0;}運(yùn)行結(jié)果:x,y56Point++->x=5,y=6NowPoint->x=6,y=7++Point->x=7,y=8NowPoint->x=7,y=8Pressanykeytocontinue2.定義Point類,有坐標(biāo)x,y兩個成員變量,利用運(yùn)算符重載對Point類重載“++〞運(yùn)算符,實現(xiàn)對坐標(biāo)值的改變。具體要求如下:編寫程序定義Point類,在類中定義整型的私有成員變量x,y;定義成員函數(shù)Point&operator++();Pointoperator++(int);以實現(xiàn)對Point類重載“++〞運(yùn)算符,分別重載前置++和后置++;編寫主函數(shù)測試。2程序代碼:#include<iostream>usingnamespacestd;classPoint{ intx,y;public: Point(){} Point(int&a,int&b) { x=a; y=b; } Pointoperator++(int){ inta,b; a=x++; b=y++; cout<<"Point++->x="<<a<<",y="<<b<<endl; return*this; } Pointoperator++(){ inta,b; a=++x; b=++y; cout<<"++Point->x="<<a<<",y="<<b<<endl; return*th

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論