版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《面向?qū)ο蟪绦蛟O(shè)計(jì)技能訓(xùn)練》實(shí)驗(yàn)指導(dǎo)書PAGE18PAGE90《面向?qū)ο蟪绦蛟O(shè)計(jì)技能訓(xùn)練》實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)1類與對象的概念一、實(shí)驗(yàn)?zāi)康模?.掌握類的定義方法,能合理指定類中成員的訪問權(quán)限2.學(xué)習(xí)對象的說明和使用方法3.正確理解類與結(jié)構(gòu)體的異同4.理解this指針的用途二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容定義一個(gè)描述學(xué)生通訊錄的類,數(shù)據(jù)成員包括:姓名、學(xué)校、電話號碼和郵編;成員函數(shù)包括:輸出各個(gè)數(shù)據(jù)成員的值,分別設(shè)置和獲取各個(gè)數(shù)據(jù)成員的值。⑴分析由于姓名、學(xué)校和電話號碼的數(shù)據(jù)長度是可變的,可使用動態(tài)的數(shù)據(jù)結(jié)構(gòu)。郵編的長度是固定的,可定義一個(gè)字符數(shù)組來存放郵編。將數(shù)據(jù)成員均定義為私有的。用一個(gè)成員函數(shù)輸出所有的成員數(shù)據(jù),用四個(gè)成員函數(shù)分別設(shè)置姓名、單位、電話號碼和郵編,再用四個(gè)成員函數(shù)分別獲取姓名、單位、電話號碼和郵編。主函數(shù)完成簡單的測試工作。一個(gè)完整的參考程序如下:#include<iostream.h>#include<string.h>classCOMMU{char*pName; //姓名,數(shù)據(jù)成員為私有的char*pSchool; //單位char*pNum; //電話號碼charBox[10]; //郵編public: voidPrint(void) //輸出數(shù)據(jù)成員 { cout<<"姓名:"<<pName<<'\t'; cout<<"單位:"<<pSchool<<'\t'; cout<<"電話號碼:"<<pNum<<'\t'; cout<<"郵編:"<<Box<<'\n'; } voidInit(char*,char*,char*,char*); voidFreeSpace(void); //釋放數(shù)據(jù)成員占用的空間 voidSetName(char*name) { if(pName)delete[]pName; //釋放存儲空間 pName=newchar[strlen(name)+1]; //申請存儲空間 strcpy(pName,name); } voidSetScool(char*unit) //置學(xué)校名稱 { if(pSchool)delete[]pSchool; pSchool=newchar[strlen(unit)+1]; strcpy(pSchool,unit); } voidSetNum(char*num) //置電話號碼 { if(pNum)delete[]pNum; pNum=newchar[strlen(num)+1]; strcpy(pNum,num); } voidSetBox(char*mailnum) //置郵編 { strcpy(Box,mailnum); } char*GetName(void) //取姓名 {returnpName;} char*GetScool(void) //取學(xué)校 {returnpSchool;} char*GetNum(void) //取電話號碼 {returnpNum;} char*GetBox(void) //取郵編 {returnBox;}};voidCOMMU::Init(char*name,char*unit,char*num,char*b){ //完成初始化 pName=newchar[strlen(name)+1]; strcpy(pName,name); pSchool=newchar[strlen(unit)+1]; strcpy(pSchool,unit); pNum=newchar[strlen(num)+1]; strcpy(pNum,num); strcpy(Box,b);}voidCOMMU::FreeSpace(void){ if(pName)delete[]pName; if(pSchool)delete[]pSchool; if(pNum)delete[]pNum;}voidmain(void){ COMMUc1,c2; c1.Init("張建國","南京大學(xué)",,"210024"); c2.Init("李國強(qiáng)","南京工業(yè)大學(xué)",,"210015"); c1.Print(); c2.Print(); c1.SetName("王國安"); cout<<c1.GetName()<<'\n'; c1.SetScool("南京理工大學(xué)"); cout<<c1.GetScool()<<'\n'; c1.SetNum(); cout<<c1.GetNum()<<"\n"; c1.SetBox("210090"); cout<<c1.GetBox()<<"\n"; c1.Print(); c1.FreeSpace(); c2.FreeSpace();}⑵上機(jī)要求用以下數(shù)據(jù)測試程序的正確性:對象的初始化數(shù)據(jù)為:李文明清華大學(xué)010—232345670123344名字改為“李明明”,并輸出;學(xué)校改為“北京理工大學(xué)”并輸出;電話改為“010—55667878”,并輸出;郵編改為“150035”并輸出。將成員函數(shù)的權(quán)限改為私有的,觀察現(xiàn)象。將類改為結(jié)構(gòu)體,重新執(zhí)行程序,輸出成員數(shù)據(jù)。增加數(shù)據(jù)成員:郵件地址,手機(jī)號碼,并將電話號碼分為住宅電話和辦公電話。設(shè)計(jì)一個(gè)實(shí)現(xiàn)以上功能的源程序,并完成程序的測試。實(shí)驗(yàn)2構(gòu)造函數(shù)與析構(gòu)函數(shù)的用法一、實(shí)驗(yàn)?zāi)康模?.掌握定義構(gòu)造函數(shù)、重載構(gòu)造函數(shù)的方法2.理解構(gòu)造函數(shù)的作用3.掌握定義析構(gòu)函數(shù)的方法,理解析構(gòu)函數(shù)的作用4.加深理解拷貝構(gòu)造函數(shù)的作用和用途二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容構(gòu)造函數(shù)用于初始化對象,通過重載構(gòu)造函數(shù)可實(shí)現(xiàn)多種方法初始化對象。構(gòu)造函數(shù)是系統(tǒng)產(chǎn)生對象時(shí)自動調(diào)用的。析構(gòu)函數(shù)用于撤消對象時(shí)作收尾工作。當(dāng)對象中的成員含有用new運(yùn)算符申請的存儲空間時(shí),必須顯式定義析構(gòu)函數(shù)。將實(shí)驗(yàn)10的第一個(gè)上機(jī)實(shí)驗(yàn)題中的成員函數(shù)Init改為構(gòu)造函數(shù),將成員函數(shù)FreeSpace改為析構(gòu)函數(shù)。增加一個(gè)缺省的構(gòu)造函數(shù),使指針pName,pSchool和pNum的初值為0,使Box包含空字符串。⑴分析缺省的構(gòu)造函數(shù)完成數(shù)據(jù)成員的初始化,根據(jù)實(shí)驗(yàn)題的要求,該缺省的構(gòu)造函數(shù)可以是:COMMU() //缺省的構(gòu)造函數(shù){ pName=pSchool=pNum=0; Box[0]=0;}用構(gòu)造函數(shù)COMMU代替成員函數(shù)Init的功能,只要將函數(shù)名Init改為COMMU,即:COMMU(char*name,char*unit,char*num,char*b){ //重載構(gòu)造函數(shù) pName=newchar[strlen(name)+1]; strcpy(pName,name); pSchool=newchar[strlen(unit)+1]; strcpy(pSchool,unit); pNum=newchar[strlen(num)+1]; strcpy(pNum,num);strcpy(Box,b);}用析構(gòu)函數(shù)~COMMU代替成員函數(shù)FreeSpace,該析構(gòu)函數(shù)為:~COMMU() //析構(gòu)函數(shù){ if(pName)delete[]pName; if(pSchool)delete[]pSchool; if(pNum)delete[]pNum;}完整的參考程序?yàn)椋?include<iostream.h>#include<string.h>classCOMMU{ char*pName; //姓名,數(shù)據(jù)成員為私有的 char*pSchool; //單位 char*pNum; //電話號碼 charBox[10]; //郵編public: voidPrint(void) //輸出數(shù)據(jù)成員 { cout<<"姓名:"<<pName<<'\t'; cout<<"單位:"<<pSchool<<'\t'; cout<<"電話號碼:"<<pNum<<'\t'; cout<<"郵編:"<<Box<<'\n'; } COMMU(char*,char*,char*,char*); COMMU(); ~COMMU(); voidSetName(char*name) { if(pName)delete[]pName; //釋放存儲空間 pName=newchar[strlen(name)+1]; //申請存儲空間 strcpy(pName,name); } voidSetScool(char*unit) //置學(xué)校名稱 { if(pSchool)delete[]pSchool; pSchool=newchar[strlen(unit)+1]; strcpy(pSchool,unit); } voidSetNum(char*num) //置電話號碼 { if(pNum)delete[]pNum; pNum=newchar[strlen(num)+1]; strcpy(pNum,num); } voidSetBox(char*mailnum) //置郵編 { strcpy(Box,mailnum); } char*GetName(void) /取姓名 { returnpName; } char*GetScool(void) //取學(xué)校 { returnpSchool; } char*GetNum(void) //取電話號碼 { returnpNum; } char*GetBox(void) //取郵編 { returnBox; }};COMMU::COMMU() //缺省的構(gòu)造函數(shù){ pName=pSchool=pNum=0; Box[0]=0;}COMMU::COMMU(char*name,char*unit,char*num,char*b){ //重載構(gòu)造函數(shù) pName=newchar[strlen(name)+1]; strcpy(pName,name); pSchool=newchar[strlen(unit)+1]; strcpy(pSchool,unit); pNum=newchar[strlen(num)+1]; strcpy(pNum,num); strcpy(Box,b);}COMMU::~COMMU() //析構(gòu)函數(shù){ if(pName)delete[]pName; if(pSchool)delete[]pSchool; if(pNum)delete[]pNum;}voidmain(void){ COMMUc1("張建國","南京大學(xué)",,"210024"); COMMUc2("李國強(qiáng)","南京工業(yè)大學(xué)",,"210015"); c1.Print(); c2.Print(); c1.SetName("王國安"); cout<<c1.GetName()<<'\n'; c1.SetScool("南京理工大學(xué)"); cout<<c1.GetScool()<<'\n'; c1.SetNum(); cout<<c1.GetNum()<<"\n"; c1.SetBox("210090"); cout<<c1.GetBox()<<"\n"; c1.Print();}⑵上機(jī)要求在程序的基礎(chǔ)上,增加E_mail地址和手機(jī)號碼的數(shù)據(jù)成員。試定義一個(gè)對象數(shù)組COMMUstu[10],完成數(shù)組對象的初始化,并制表輸出通訊錄。輸入九個(gè)同學(xué)組成的通訊錄,測試程序的正確性。實(shí)驗(yàn)3繼承和派生類的應(yīng)用一、實(shí)驗(yàn)?zāi)康模?.掌握多重繼承和派生類的方法2.掌握初始化基類成員的方法3.掌握定義虛基類的方法二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容1.上機(jī)實(shí)驗(yàn)題定義一個(gè)日期(年、月、日)的類和一個(gè)時(shí)間(時(shí)、分、秒)的類,并由這兩個(gè)類派生出日期和時(shí)間類。主函數(shù)完成基類和派生類的測試工作。⑴分析定義一個(gè)描述日期的類,構(gòu)造函數(shù)完成年、月、日的初始化,包含一個(gè)重新設(shè)置日期的成員函數(shù),一個(gè)獲取日期的成員函數(shù)。該類可定義為:classDate{ intYear,Month,Day;//分別存放年、月、日public: Date(inty=0,intm=0,intd=0){ Year=y;Month=m;Day=d;}voidSetDate(int,int,int);voidGetDate(char*);};函數(shù)SetDate完成數(shù)據(jù)成員的賦初值。函數(shù)GetDate要將整數(shù)年、月、日變換成字符串后,存放到參數(shù)所指向的字符串中。把一個(gè)整數(shù)變換成字符串可通過庫函數(shù):char*_itoa(inta,char*s,intb);來實(shí)現(xiàn),參數(shù)a為要變換的整數(shù),b為數(shù)制的基數(shù)(如10,表示將a轉(zhuǎn)換為對應(yīng)的十進(jìn)制的字符串),轉(zhuǎn)換的結(jié)果存放到s所指向的字符串中。函數(shù)返回變換后字符串的首指針。該成員函數(shù)可以是:voidDate::GetDate(char*s){ chart[20]; _itoa(Year,s,10); //將年變換為字符串表示 strcat(s,"/"); //年、月、日之間用“/”隔開 _itoa(Month,t,10); //將月變換為字符串表示 strcat(s,t); //將年、月字符串拼接 strcat(s,"/"); _itoa(Day,t,10); strcat(s,t); //將年、月、日拼接成一個(gè)字符串}定義描述時(shí)間的類與描述日期的類類同,然后用這二個(gè)類作為基類,公有派生出描述日期和時(shí)間的類。簡化的參考程序如下:#include<iostream.h>#include<string.h>#include<stdlib.h>classDate{ intYear,Month,Day; //分別存放年、月、日public: Date(inty=0,intm=0,intd=0) {Year=y;Month=m;Day=d; } voidSetDate(int,int,int); voidGetDate(char*);};voidDate::SetDate(inty,intm,intd){ Year=y;Month=m;Day=d;}voidDate::GetDate(char*s){ chart[20]; _itoa(Year,s,10);strcat(s,"/"); _itoa(Month,t,10);strcat(s,t); strcat(s,"/"); _itoa(Day,t,10);strcat(s,t);}classTime{ intHours,Minutes,Seconds; //時(shí)、分、秒public: Time(inth=0,intm=0,ints=0) {Hours=h;Minutes=m;Seconds=s; } voidSetTime(inth,intm,ints) {Hours=h;Minutes=m; Seconds=s;} voidGetTime(char*);};voidTime::GetTime(char*s){ chart[20]; _itoa(Hours,s,10); strcat(s,":"); _itoa(Minutes,t,10);strcat(s,t); strcat(s,":");_itoa(Seconds,t,10);strcat(s,t);}classDateTime:publicDate,publicTime{ //公有派生public: DateTime():Date(),Time() {} DateTime(inty,intm,intd,inth,intmin,ints):Date(y,m,d),Time(h,min,s){ } voidGetDateTime(char*); voidSetDateTime(inty,intm,intd,inth,intmin,ints);};voidDateTime::GetDateTime(char*s){ chars1[100],s2[100]; GetDate(s1); GetTime(s2); strcpy(s,"日期和時(shí)間分別是:"); strcat(s,s1); strcat(s,";"); strcat(s,s2);}voidDateTime::SetDateTime(inty,intm,intd,inth,intmin,ints){ SetDate(y,m,d);SetTime(h,min,s);}voidmain(void){ Dated1(2003,1,30); chars[200]; d1.GetDate(s); cout<<"日期是:"<<s<<'\n'; Timet1(12,25,50); t1.GetTime(s); cout<<"時(shí)間是:"<<s<<'\n'; DateTimedt1(2003,2,4,8,20,15); dt1.GetDateTime(s); cout<<s<<'\n'; dt1.SetDateTime(2003,12,30,23,50,20); dt1.GetDateTime(s); cout<<s<<'\n';}⑵上機(jī)要求將類DateTime改為由基類Date和Time私有派生,程序能否正確編譯和執(zhí)行,為什么?
實(shí)驗(yàn)4友元函數(shù)及虛函數(shù)的應(yīng)用一、實(shí)驗(yàn)?zāi)康模?.掌握友元函數(shù)的定義方法2.理解并掌握利用虛函數(shù)實(shí)現(xiàn)動態(tài)多態(tài)性和編寫通用程序的方法3.掌握靜態(tài)數(shù)據(jù)成員的特性二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容1.上機(jī)實(shí)驗(yàn)題利用虛函數(shù)實(shí)現(xiàn)的多態(tài)性來求四種幾何圖形的面積之和。這四種幾何圖形是:三角形、矩形、正方形和圓。幾何圖形的類型可以通過構(gòu)造函數(shù)或通過成員函數(shù)來設(shè)置。⑴分析計(jì)算這四種幾何圖的面積公式分別是:三角形的邊長為W,高為H時(shí),則三角形的面積為W*H/2;矩形的邊長為W,寬為H時(shí),則其面積為W*H;正方形的邊長為S,則正方形的面積為S*S;圓的半徑為R,其面積為3.1415926*R*R。為設(shè)置幾何圖形的數(shù)據(jù)并求出幾何圖形的面積,需要定義一個(gè)包含兩個(gè)虛函數(shù)的類:classShape{public: virtualfloatArea(void)=0; //求面積 virtualvoidSetdata(float,float=0)=0; //設(shè)置圖形數(shù)據(jù)};因面積的計(jì)算依賴于幾何圖形,故在類中只能定義一個(gè)純虛函數(shù)Area。同理,設(shè)置幾何圖形數(shù)據(jù)的函數(shù)Setdata也只能定義為虛函數(shù)。把這個(gè)基類派生出其它幾何圖形類。如派生出的三角形類為:classTriangle:publicShape{ floatW,H; //三角形邊長為W,高為Hpublic: Triangle(floatw=0,floath=0){W=w;H=h;} floatArea(void){returnW*H/2;} voidSetdata(floatw,floath=0){W=w;H=h;}};在派生類中定義了基類中兩個(gè)虛函數(shù)的實(shí)現(xiàn)。為了實(shí)現(xiàn)求面積和設(shè)置數(shù)據(jù)的多態(tài)性,必須定義一個(gè)類,該類中定義一個(gè)指向基類Shape的指針數(shù)組,其元素分別指向由基類Shape派生出的不同的幾何圖形類,并完成求出所有幾何圖形面積之和,以及設(shè)置參數(shù)的函數(shù)。一個(gè)完整的參考程序如下:#include<iostream.h>#include<string.h>classShape{public: virtualfloatArea(void)=0; //虛函數(shù) virtualvoidSetdata(float,float=0)=0; //虛函數(shù)};classTriangle:publicShape{ floatW,H; //三角形邊長為W,高為Hpublic: Triangle(floatw=0,floath=0) { W=w;H=h; } floatArea(void) //定義虛函數(shù) { returnW*H/2; } voidSetdata(floatw,floath=0) //定義虛函數(shù) { W=w;H=h; }};classRectangle:publicShape{ floatW,H; //矩形邊長為W,高為Hpublic: Rectangle(floatw=0,floath=0){W=w;H=h;} floatArea(void) //定義虛函數(shù) { returnW*H; } voidSetdata(floatw,floath=0) //定義虛函數(shù) { W=w;H=h; }};classSquare:publicShape{ floatS; //正方形邊長Spublic: Square(floata=0) { S=a; } floatArea(void) //定義虛函數(shù) { returnS*S/2; } voidSetdata(floatw,floath=0) //定義虛函數(shù) { S=w; }};classCircle:publicShape{ floatR; //圓的半徑為Rpublic: Circle(floatr=0) { R=r; } floatArea(void) //定義虛函數(shù) { return3.1415926*R*R; } voidSetdata(floatw,floath=0) //定義虛函數(shù) { R=w; }};classCompute{ Shape**s; //指向基類的指針數(shù)組public:Compute() { //給幾何圖形設(shè)置參數(shù) s=newShape*[4]; s[0]=newTriangle(3,4); s[1]=newRectangle(6,8); s[2]=newSquare(6.5); s[3]=newCircle(5.5); } floatSumArea(void); ~Compute(); voidSetdata(intn,floata,floatb=0) //A { s[n]->Setdata(a,b); } //B};Compute::~Compute() //釋放動態(tài)分配的存儲空間{ for(inti=0;i<4;i++) deletes[i]; delete[]s;}floatCompute::SumArea(void){ floatsum=0; for(inti=0;i<4;i++) sum+=s[i]->Area(); //通過基類指針實(shí)現(xiàn)多態(tài)性 returnsum;}voidmain(void){ Computea; cout<<"四種幾何圖形的面積="<<a.SumArea()<<'\n'; a.Setdata(2,10); //設(shè)置正方形的邊長 cout<<"四種幾何圖形的面積="<<a.SumArea()<<'\n';a.Setdata(0,10,12); //設(shè)置三角形的邊長和高 cout<<"四種幾何圖形的面積="<<a.SumArea()<<'\n'; a.Setdata(1,2,5); //設(shè)置正方形的長和寬 cout<<"四種幾何圖形的面積="<<a.SumArea()<<'\n'; a.Setdata(3,15.5); cout<<"四種幾何圖形的面積="<<a.SumArea()<<'\n';}程序中A行的Setdata函數(shù)屬于函數(shù)重載,它不是虛函數(shù)。該函數(shù)中的B行通過基類指針實(shí)現(xiàn)多態(tài)性。⑵上機(jī)要求自己設(shè)計(jì)測試數(shù)據(jù),測試程序的正確性。
實(shí)驗(yàn)5運(yùn)算符重載的應(yīng)用一、實(shí)驗(yàn)?zāi)康模?.掌握用成員函數(shù)重載運(yùn)算符的方法2.掌握用友元函數(shù)重載運(yùn)算符的方法二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容1.機(jī)實(shí)驗(yàn)題定義一個(gè)復(fù)數(shù)類,通過重載運(yùn)算符:*,/,直接實(shí)現(xiàn)二個(gè)復(fù)數(shù)之間的乘除運(yùn)算。編寫一個(gè)完整的程序,測試重載運(yùn)算符的正確性。要求乘法“*”用友元函數(shù)實(shí)現(xiàn)重載,除法“/”用成員函數(shù)實(shí)現(xiàn)重載。⑴分析兩復(fù)數(shù)相乘的計(jì)算公式為:(a+bi)*(c+di)=(ac–bd)+(ad+bc)i兩復(fù)數(shù)相除的計(jì)算公式為:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i復(fù)數(shù)類及運(yùn)算符重載函數(shù)可定義為:classComplex{ floatReal,Image;public: Complex(floatr=0,floati=0) {Real=r;Image=i;} voidShow() {cout<<"Real="<<Real<<'\t'<<"Image="<<Image<<'\n';} friendComplexoperator*(Complex&,Complex&); Complexoperator/(Complex&); //重載運(yùn)算符+};Complexoperator*(Complex&c1,Complex&c2){ Complext; t.Real=c1.Real*c2.Real-c1.Image*c2.Image; t.Image=c1.Image*c2.Real+c1.Real*c2.Image; returnt;}ComplexComplex::operator/(Complex&c){ Complext; t.Real=(Real*c.Real+Image*c.Image)/(c.Real*c.Real+c.Image*c.Image); t.Image=(Image*c.Real-Real*c.Image)/(c.Real*c.Real+c.Image*c.Image); returnt;}⑵上機(jī)要求增加重載復(fù)數(shù)的加法和減法運(yùn)算符的功能,實(shí)現(xiàn)兩個(gè)復(fù)數(shù)的加法,一個(gè)復(fù)數(shù)與一個(gè)實(shí)數(shù)的加法;兩個(gè)復(fù)數(shù)的減法,一個(gè)復(fù)數(shù)與一個(gè)實(shí)數(shù)的減法。用成員函數(shù)實(shí)現(xiàn)加法運(yùn)算符的重載,用友元函數(shù)實(shí)現(xiàn)減法運(yùn)算符的重載。自已設(shè)計(jì)主函數(shù),完成程序的調(diào)試工作。
實(shí)驗(yàn)6標(biāo)準(zhǔn)設(shè)備與文件流的輸入輸出一、實(shí)驗(yàn)?zāi)康模?.掌握文件流的打開、關(guān)閉及使用的使用方法2.理解文本文件流與二進(jìn)制文件流在操作上的區(qū)別二、實(shí)驗(yàn)要求(1)調(diào)試程序要記錄調(diào)試過程中出現(xiàn)的問題及解決辦法;(2)給出每個(gè)問題的算法或畫出流程圖;(3)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄,并注意調(diào)試程序集成環(huán)境的掌握及應(yīng)用,不斷積累編程及調(diào)試經(jīng)驗(yàn);(4)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)設(shè)備、環(huán)境奔騰以上計(jì)算機(jī),裝有VC++軟件四、實(shí)驗(yàn)步驟及內(nèi)容1.上機(jī)實(shí)驗(yàn)題設(shè)計(jì)一個(gè)管理圖書目的簡單程序,提供的基本功能包括:可連續(xù)將新書存入文件“book.dat”中,新書信息加入到文件的尾部;也可以根據(jù)輸入的書名進(jìn)行查找;把文件“book.dat”中同書名的所有書顯示出來。為簡單起見,描述一本書的信息包括:書號,書名,出版社和作者。⑴分析可以把描述一本書的信息定義為一個(gè)Book類,它包含必要的成員函數(shù)。把加入的新書總是加入到文件尾部,所以,以增補(bǔ)方式打開輸出文件。從文件中查找書時(shí),總是從文件開始位置查找,以讀方式打開文件。用一個(gè)循環(huán)語句實(shí)現(xiàn)可連續(xù)地將新書加入文件或從文件中查找指定的書名。由于是以一個(gè)Book類的實(shí)例進(jìn)行文件輸入輸出的,所以,這文件的類型應(yīng)該是二進(jìn)制文件。簡化的參考程序如下:#include<iostream.h>#include<string.h>#include<fstream.h>classBook{ longintnum; //書號 charbookname[40]; //書名 charpublicname[40]; //出版社 charname[20]; //作者public: Book() {num=0;bookname[0]=0;publicname[0]=0;name[0]=0;} char*Getbookname(void) {returnbo
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年航空器維修與檢修服務(wù)合同范本3篇
- 2025年度船舶船舶動力系統(tǒng)安全評估與風(fēng)險(xiǎn)控制合同3篇
- 2025年度智能電網(wǎng)設(shè)備采購與安裝合同6篇
- 2024年詳盡版:國際貨運(yùn)代理與多式聯(lián)運(yùn)合同
- 2024年購銷合同實(shí)例:買賣合同的詳細(xì)操作流程
- 2024銑刨作業(yè)質(zhì)量控制與驗(yàn)收合同3篇
- 2024年高端機(jī)床制造技術(shù)與專利許可協(xié)議
- 2024年沿海地區(qū)海鮮收購合同
- 2025年度智慧城市建設(shè)采購合同管理創(chuàng)新方案3篇
- 2024年版:工程擔(dān)保服務(wù)協(xié)議2篇
- 養(yǎng)老機(jī)構(gòu)入住老人服藥記錄表模板
- 化工總控工初級理論知識試卷(國家職業(yè)技能鑒定)
- T∕CAME 27-2021 醫(yī)院物流傳輸系統(tǒng)設(shè)計(jì)與施工規(guī)范
- 電子政務(wù)案例
- (完整)公司組織架構(gòu)和部門職責(zé)
- 合理化建議與管理創(chuàng)新獎勵(lì)制
- 擠出機(jī)設(shè)備操作規(guī)程
- 洗胃操作流程及評分標(biāo)準(zhǔn)
- CRISPR基因編輯技術(shù)PPT課件
- 地下連續(xù)墻拆除方案
- 二年級上冊數(shù)學(xué)期中試卷
評論
0/150
提交評論