第一篇:華中科技大學(xué)c++第3次上機(jī)作業(yè)
華中科技大學(xué)
《計(jì)算機(jī)基礎(chǔ)與程序設(shè)計(jì)(C++)》
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:第三次上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí):4 姓名:學(xué)號(hào):班級(jí):電氣
實(shí)驗(yàn)日期:2017/3/27
教師批閱簽字:
一、實(shí)驗(yàn)?zāi)康?/p>
?
? ? ? 掌握三種循環(huán)語(yǔ)句的使用。學(xué)會(huì)使用continue 和break。掌握多重循環(huán)的設(shè)計(jì)。掌握常用算法的應(yīng)用。
二、實(shí)驗(yàn)內(nèi)容
1.在vc環(huán)境下編寫下述程序代碼,編譯調(diào)試然后用不同的數(shù)據(jù)測(cè)試直至得到完全正確的結(jié)果。并解釋出錯(cuò)原因。
#include
cout<<“輸入一個(gè)正數(shù):”;
cin>>a;
if(a<0)
cout< else; { x0=a/2; x1=(x0+a/x0)/2; while(abs(x1-x0)>=1e-5){ x0=x1; x1=(x0+a/x0)/2; } cout<< a<<“的平方根為:”< } return 0;語(yǔ)法錯(cuò)誤: 1.最后缺少花括號(hào)。邏輯錯(cuò)誤: 1.else后面有分號(hào),導(dǎo)致花括號(hào)中的語(yǔ)句不受else限制。2.abs所提供的精度為整數(shù) 更改后的程序: #include cout<<“輸入一個(gè)正數(shù):”; cin>>a; if(a<0) cout< else { x0=a/2;x1=(x0+a/x0)/2; while(fabs(x1-x0)>=1e-5){ x0=x1; x1=(x0+a/x0)/2; } cout<< a<<“的平方根為:”< } return 0;} 2.下列程序的功能是:計(jì)算一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子,假設(shè)兔子不存在死亡問(wèn)題,請(qǐng)問(wèn)從第1個(gè)月到第20個(gè)月,每個(gè)月有多少對(duì)兔子?要求輸出時(shí)按行列方式每行顯示5個(gè)數(shù)據(jù)。如下圖: 編譯調(diào)試該程序看是否正確,不正確的話修改之直至完全滿足要求。并解釋出錯(cuò)原因。int main(){ int fib0=0,fib1=1,fib2;int n; } cout< 語(yǔ)法錯(cuò)誤: 1.缺少頭文件(iostream以及iomanip)以及命名空間。2.return0后的分號(hào)為中文分號(hào)。邏輯錯(cuò)誤: 1.cout< #include int fib0=0,fib1=1,fib2;int n; cout< fib2=fib0+fib1; cout< fib0=fib1; fib1=fib2; if((n+1)%5==0)cout< } return 0;} 3. 編程任意輸入一個(gè)三位數(shù),判斷其是否是水仙花數(shù)(水仙花數(shù)是指這個(gè)數(shù)等于個(gè)位,十位和百位的立方和。例如:153=13+53+33)要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include cout<<“該整數(shù)為水仙花數(shù)”< cout<<“該整數(shù)不是水仙花數(shù)”< 解決本題的算法思路描述。 首先要解決的是如何取得個(gè)十百三位的數(shù)字,然后用if語(yǔ)句進(jìn)行判斷。調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)對(duì)十位和百位的數(shù)字進(jìn)行提取的時(shí)候出現(xiàn)錯(cuò)誤。 開始時(shí): g=a%10;改正后:g=a%10; s=a%100;s=(a/10)%10;b=a%1000;b=a/100;4. 輸出3到100以內(nèi)的所有素?cái)?shù)。(要求每行顯示8個(gè)數(shù)) ?提示:該題需要用到多重循環(huán),外循環(huán)代表需要判斷的數(shù),從3到100,內(nèi)循環(huán)判斷該數(shù)是否是素?cái)?shù),參考教材的例4.9(判斷一個(gè)數(shù)是否為素?cái)?shù))。 要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include a=1; for(n=2;n { if(i%n==0) } { a=0; break; } } if(a==1) { cout< m=m+1; if(m%8==0) cout< } else ; } return 0; 解決本題的算法思路描述 運(yùn)用雙重循環(huán)語(yǔ)句進(jìn)行,一個(gè)用來(lái)判斷是否為素?cái)?shù),另外一個(gè)用來(lái)循環(huán)3-100.調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程) a需要每次循環(huán)都賦值,最初放在循環(huán)外,導(dǎo)致只能輸出3一個(gè)數(shù)字。花括號(hào)位置錯(cuò)誤,導(dǎo)致格式不正確。 5. 連續(xù)輸入n 個(gè)整數(shù)(n由鍵盤輸入)統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)。要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include cin>>a; if(a==0) l++; else if(a>0) z++; else f++;} cout<<“統(tǒng)計(jì)的數(shù)據(jù)中正數(shù)、負(fù)數(shù)以及0的個(gè)數(shù)分別”< 解決本題的算法思路描述 首先判斷輸入數(shù)據(jù)的個(gè)數(shù),然后運(yùn)用for循環(huán)和if-else語(yǔ)句進(jìn)行統(tǒng)計(jì)出現(xiàn)次數(shù)。調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)未出現(xiàn)錯(cuò)誤,但是最開始的程序未進(jìn)行相關(guān)提示。 6. 改寫教材115 例18,規(guī)則為5局3勝制規(guī)則,其余條件不變。要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include cout<<“請(qǐng)輸入兩個(gè)小孩的劃拳值,1代表石頭,2代表剪刀,3代表布?!? cin>>p1>>p2; switch(p1) { case 1:cout<<“石頭”;break; } case 2:cout<<“剪刀”;break;case 3:cout<<“布”;break;} cout<<'t';switch(p2){ case 1:cout<<“石頭”;break;case 2:cout<<“剪刀”;break;case 3:cout<<“布”;break;} cout<<'n';if(p1==p2) continue;if(p1==1&&p2==2||p1==2&&p2==3||p1==3&&p2==1) v1++;else v2++;} if(v1==3)cout<<“小孩1獲勝”< 解決本題的算法思路描述 通過(guò)修改while的循環(huán)條件即可實(shí)現(xiàn)五局三勝制 只需要統(tǒng)計(jì)兩個(gè)孩子的勝利次數(shù),誰(shuí)先到達(dá)三次即獲勝 調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)由于為書中例題,只需簡(jiǎn)單修改即可完成,故未出現(xiàn)錯(cuò)誤 7. 改寫教材龜兔賽跑程序,要求在指定距離的條件下比賽,其余規(guī)則不變。要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include int s,sw=0,st=0,station=0,sleep=0,run=0;cout<<“輸入比賽距離:”;cin>>s;while(sw if(station==0) { run++; sw+=3; st+=9; if(run==10) { run=0; if(st>sw) station=1; else ; } else ; } else { sleep++;sw+=3;if(sleep==30){ station=0;sleep=0;} else;} } if(sw>st) cout<<“烏龜勝”< cout<<“兔子勝”< else cout<<“平局”< 解決本題的算法思路描述 1.以時(shí)間為循環(huán)的控制條件,計(jì)算兩者走相同路程時(shí)誰(shuí)的時(shí)間少,運(yùn)用累計(jì)時(shí)間的算法,有一者到達(dá)指定路程就停止計(jì)時(shí),然后比較兩者的路程。2.對(duì)烏龜和兔子的行程進(jìn)行累計(jì),通過(guò)速度和時(shí)間來(lái)完成。 3.判斷兔子是否在進(jìn)行休息,用station來(lái)表示,0為運(yùn)動(dòng)1為睡覺。4.累計(jì)睡覺的時(shí)間,每到十分鐘要重新從0開始計(jì)算。調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)賦值符號(hào)與判斷相等的符號(hào)混淆。 8. 小王拿了50元錢準(zhǔn)備去菜場(chǎng)買菜,已知黃瓜3元1斤,韭菜5元1斤,西紅柿4元1斤,如何買這3樣菜(每種菜都必須買),并且將50元花完,列出所有可能的買法。(只考慮整斤)要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此)#include for(j=1;j<=10;j++) { for(x=1;x<13;x++) { if(3*h+5*j+4*x==50) cout<<“黃瓜,韭菜,西紅柿的數(shù)量分別為”< } } } return 0;} 解決本題的算法思路描述 利用多重循環(huán),使用窮舉法得出結(jié)果。 調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)For語(yǔ)句中;錯(cuò)寫為,循環(huán)語(yǔ)句出錯(cuò),更改了循環(huán)語(yǔ)句。 9. 編程將一個(gè)10進(jìn)制整數(shù)轉(zhuǎn)換成2進(jìn)制整數(shù)。要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include 解決本題的算法思路描述 十進(jìn)制轉(zhuǎn)為二進(jìn)制的各個(gè)位數(shù)的數(shù)字用對(duì)2取余獲得 然后用數(shù)組儲(chǔ)存數(shù)字 最后倒序輸出 調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)For語(yǔ)句中的j開始時(shí)定義錯(cuò)數(shù)值,應(yīng)為i-1忘記減1 10. 編程將一個(gè)10進(jìn)制定點(diǎn)小數(shù)轉(zhuǎn)換成2進(jìn)制定點(diǎn)小數(shù)。要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include a=s*2; if(a>=1) s=a-1; else s=a; m++; cout< if(s==0) break;} cout< 解決本題的算法思路描述 小數(shù)點(diǎn)后的每一位數(shù)字用乘2循環(huán)求得,乘2后的小數(shù)用floor取整 調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)輸入數(shù)據(jù)的類型出錯(cuò)。由int改為double 11. 編程要求從文件in.txt 中連續(xù)讀入n個(gè)數(shù)(n由鍵盤輸入),統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)。(in.txt 是事先建好的一個(gè)文件存有若干數(shù)據(jù),當(dāng)輸入的n值大于in.txt文件中的數(shù)據(jù)個(gè)數(shù)時(shí)給出相應(yīng)的提示,判斷文件中的數(shù)據(jù)是否讀完使用eof()函數(shù)。eof()函數(shù)是判斷是否到文件結(jié)尾,如果到文件結(jié)尾函數(shù)返回1,否則返回0,具體參考教材115頁(yè)例4.17)要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include in>>x; i++; if(x==0) l++; else if(x>0) z++; else f++;} m=l+z+f; if(n>m) {cout<<“數(shù)據(jù)數(shù)量小于所要統(tǒng)計(jì)的數(shù)量”< cout<<“統(tǒng)計(jì)的正數(shù)、負(fù)數(shù)和零數(shù)量分別為”< in.close(); return 0;} 解決本題的算法思路描述 運(yùn)用讀取文件的語(yǔ)句,用if語(yǔ)句累計(jì)三種數(shù)據(jù)的個(gè)數(shù)。調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程) 逗號(hào)用的中文用了''標(biāo)志出現(xiàn)錯(cuò)誤。更改為英文的逗號(hào)正常了。 12.(選做)一位商人有一個(gè)40磅的砝碼,由于跌落在地而碎成4塊,后來(lái)稱得每塊碎片的重量都是整數(shù),而且可以用這4塊來(lái)稱從1到40磅之間的任意整數(shù)磅的重物,問(wèn)這4塊砝碼碎片各重多少? ?提示:此題需要兩次用到窮舉法,第一次窮舉是4個(gè)砝碼的重量,分別用四個(gè)循環(huán)變量i, j, k, l來(lái)表示。第二次窮舉是當(dāng)i+j+k+l==40時(shí),對(duì)重1磅到40磅共40種物品使用i, j, k, l四個(gè)稱進(jìn)行組合,設(shè)置一個(gè)計(jì)數(shù)器,組合出1個(gè)計(jì)數(shù)器加1,如果能組合出40個(gè),就是我們要找的答案。 要求: 程序原代碼,及運(yùn)行結(jié)果截圖。(直接粘貼在此) #include { int i,j,k,l,d1,d2,d3,d4,x,flag,s=0; cout<<“砝碼分為”; for(i = 1;i < 41;i++) { for(j = i;j < 41;j++) { for(k = j;k < 41;k++) { if((l = 40-i-j-k)>=k) { s=0; for(x=1;x<41;x++) { flag=0; for(d1=1;d1>-2&&flag==0;d1--) { for(d2=1;d2>-2&&flag==0;d2--) { for(d3=1;d3>-2&&flag==0;d3--) { for(d4=1;d4>-2&&flag==0;d4--) { if(x == i*d1+j*d2+k*d3+l*d4) { flag = 1; s++; } } } } } if(s==40) { cout< } } } } } } return 0; } 解決本題的算法思路描述 首先找出所有組合,然后進(jìn)行篩選。 調(diào)試過(guò)程的記載(包括出現(xiàn)的錯(cuò)誤,以及修改過(guò)程)最終的輸出語(yǔ)句所在位置一直不正確,通過(guò)調(diào)試解決。解決同一個(gè)x可能導(dǎo)致s多次累加的問(wèn)題 解決存在重復(fù)的問(wèn)題,即出現(xiàn)1.3.9.27和3.1.9.27等 三、對(duì)本次實(shí)驗(yàn)內(nèi)容及方法、手段的改進(jìn)建議,以及實(shí)驗(yàn)心得實(shí)驗(yàn)心得包括:1)哪些知識(shí)點(diǎn)已掌握 2)哪些知識(shí)點(diǎn)有困難 3)對(duì)講課的建議 4)對(duì)沒有掌握知識(shí)的補(bǔ)救建議 1) For語(yǔ)句循環(huán),while以及do-while語(yǔ)句已經(jīng)掌握。If-else語(yǔ)句、break、continue已經(jīng)掌握。文件的讀取與寫入也已經(jīng)能夠運(yùn)用。2) 對(duì)于龜兔賽跑等很復(fù)雜的問(wèn)題掌握不夠熟練 For語(yǔ)句很多次的疊加可能出錯(cuò) 3) 多進(jìn)行程序上的演示,更容易理解。4) 多進(jìn)行相關(guān)習(xí)題的訓(xùn)練掌握原理 重新閱讀課本。 第二次上機(jī)實(shí)驗(yàn)報(bào)告 姓名:王小寧 班級(jí): 學(xué)號(hào): 031012 1234 第一題: 題目: 編寫一個(gè)類,聲明一個(gè)數(shù)據(jù)成員和一個(gè)靜態(tài)數(shù)據(jù)成員,其構(gòu)造函數(shù)初始化數(shù)據(jù)成員,并把靜態(tài)數(shù)據(jù)成員加1,其析構(gòu)函數(shù)把靜態(tài)數(shù)據(jù)成員減1.(1)編寫一個(gè)應(yīng)用程序,創(chuàng)建該類的3個(gè)對(duì)象,然后顯示其數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員,再析構(gòu)每個(gè)對(duì)象,并顯示它們對(duì)靜態(tài)數(shù)據(jù)成員的影響。 (2)修改該類,增加靜態(tài)成員函數(shù)并訪問(wèn)靜態(tài)數(shù)據(jù)成員,并聲明靜態(tài)數(shù)據(jù)成員為保護(hù)成員。體會(huì)靜態(tài)成員函數(shù)的使用,靜態(tài)成員之間與非靜態(tài)成員之間互訪問(wèn)題。 編程思想: 首先,定義一個(gè)類,其中含有兩個(gè)類的私有變量,一個(gè)靜態(tài)數(shù)據(jù)變量,定義構(gòu)造函數(shù),將初值賦給兩個(gè)私有變量,并將靜態(tài)數(shù)據(jù)變量加1,并顯示.定義一個(gè)析構(gòu)函數(shù),并通過(guò)析構(gòu)函數(shù)將靜態(tài)成員變量減1.并顯示。 修改以上的類,增加一個(gè)靜態(tài)成員函數(shù)并通過(guò)靜態(tài)成員函數(shù)來(lái)訪問(wèn)靜態(tài)成員變量。在主函數(shù)中利用一個(gè)指向函數(shù)的指針指向這個(gè)靜態(tài)成員函數(shù),并通過(guò)這個(gè)指針來(lái)訪問(wèn)類中的靜態(tài)數(shù)據(jù)。代碼實(shí)現(xiàn): 代碼1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 問(wèn)題及心得: 在這次試驗(yàn)中,我理解了靜態(tài)變量與普通變量之間的差異與聯(lián)系。在實(shí)驗(yàn)過(guò)程中因未初靜態(tài)變量始化而無(wú)法通過(guò)編譯,并且注意到靜態(tài)變量一定要在類外初始化。 題目2: 創(chuàng)建一個(gè)Person類,該類中有字符數(shù)組,表示姓名、街道地址、市、省和郵政編碼。其功能有修改姓名、顯示數(shù)據(jù)信息。要求其功能函數(shù)的原型放在類定義中,構(gòu)造函數(shù)初始化每個(gè)成員,顯示信息函數(shù)要求把對(duì)象中的完整信息打印出來(lái)。其中數(shù)據(jù)成員為保護(hù)的,函數(shù)為公有的。 編程思想: 創(chuàng)建一個(gè)PERSON類,定義姓名、街道地址、市、省和郵政編碼分別為CHAR型的指針?biāo)接行妥兞俊T诙x公有型的構(gòu)造函數(shù),并在構(gòu)造函數(shù)中申請(qǐng)動(dòng)態(tài)內(nèi)存來(lái)保存初始化的內(nèi)容,并用相應(yīng)的私有性的指針變量指向,再利用復(fù)制函數(shù)則指針中將會(huì)存放入輸入內(nèi)容。定義公有的析構(gòu)函數(shù)釋放動(dòng)態(tài)申請(qǐng)的空間。定義一個(gè)公有的改變函數(shù)改變其中一個(gè)變量,方法與構(gòu)造函數(shù)相似。 代碼實(shí)現(xiàn): #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“郵政編碼:”< 運(yùn)行結(jié)果: 實(shí)驗(yàn)心得: 通過(guò)這個(gè)實(shí)驗(yàn),我們學(xué)會(huì)了對(duì)類的私有的字符數(shù)組變量的初始化。利用指針動(dòng)態(tài)分配空間。 C++上機(jī)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱:實(shí)驗(yàn) 專業(yè)班級(jí): 姓 名: 學(xué) 號(hào): 實(shí)驗(yàn)日期: 11 實(shí)驗(yàn) 目錄 1.實(shí)驗(yàn)?zāi)康?/p> 2.實(shí)驗(yàn)內(nèi)容 3.程序代碼 4.調(diào)試結(jié)果 5.實(shí)驗(yàn)心得 1.實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)10(1)進(jìn)一步了解運(yùn)算符重載的概念和使用方法;(2)掌握幾種常用的運(yùn)算符重載的方法;(3)了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法; (4)了解在Visual C++6.0環(huán)境下進(jìn)行運(yùn)算符重載要注意的問(wèn)題。實(shí)驗(yàn)11(1)了解繼承在面向?qū)ο蟪绦蛟O(shè)計(jì)中的重要作用;(2)進(jìn)一步理解繼承和派生的概念; (3)掌握通過(guò)繼承派生出一個(gè)新的類的方法;(4)了解虛基類的作用和用法。 2.實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)10 事先編好程序,上機(jī)進(jìn)行調(diào)試和運(yùn)行程序,分析結(jié)果。(1)聲明一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,“-”,“*”,“/”,使之能用于復(fù)數(shù)的加,減,乘,除,運(yùn)算符重載函數(shù)作為Complex類成員的函數(shù)。編程序,分別求兩個(gè)復(fù)數(shù)之和,差,積和商。(2)聲明一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,使之能用于復(fù)數(shù)的加法運(yùn)算。參加運(yùn)算的兩個(gè)運(yùn)算量可以都是類對(duì)象,也可以其中有一個(gè)是整數(shù),順序任意。 運(yùn)行程序,分別求兩個(gè)復(fù)數(shù)之和,整數(shù)和復(fù)數(shù)之和,(3)有兩個(gè)矩陣a和b,均為2行3列。求兩個(gè)矩陣之和。重載運(yùn)算符“+”,使之能用于兩個(gè)矩陣相加 (4)聲明一個(gè)Teacher(教師)類和一個(gè)Student(學(xué)生)類,二者有一部分?jǐn)?shù)據(jù)成員是相同的,例如num(號(hào)碼),name(名字),sex(性別)。編寫程序,將一個(gè)Student對(duì)象(學(xué)生)轉(zhuǎn)換為Teacher(教師)類,只將以上三個(gè)相同的數(shù)據(jù)成員移植過(guò)去??梢栽O(shè)想為:一位學(xué)生大學(xué)畢業(yè)了,留校擔(dān)任教師,他原有的部分?jǐn)?shù)據(jù)對(duì)現(xiàn)在的教師身份來(lái)說(shuō)任然是有用的,應(yīng)當(dāng)保留并成為其教師的數(shù)據(jù)的一部分。 實(shí)驗(yàn)11 事先編寫好程序,上機(jī)調(diào)試和運(yùn)行程序,分析結(jié)果。 (1)將教材第11章例11.1的程序片段補(bǔ)充和改寫成一個(gè)完整的、正確的程序,用公用繼承方式。在程序中應(yīng)當(dāng)包括輸入數(shù)據(jù)的函數(shù),在程序運(yùn)行時(shí)輸入num,name,sex,age,addr的值,程序應(yīng)輸出以上5個(gè)數(shù)據(jù)的值。 (2)將教材第11章例11.3的程序修改、補(bǔ)充,寫成一個(gè)完整、正確的程序,用保護(hù)繼承方式。在程序中應(yīng)包括輸入數(shù)據(jù)的函數(shù)。(3)修改上面第(2)題的程序,改為用公用繼承方式。上機(jī)調(diào)試程序,使之能夠正確運(yùn)行并得到正確的結(jié)果。 對(duì)這兩種繼承方式做比較分析,考慮在什么情況下二者不能互相替換。 (4)分別聲明Teacher(教師)類和Cadre(干部)類,采用多 重繼承方式由這兩個(gè)類派生出新類Teacher-Cadre(教師兼干部)。要求: Ⅰ.在兩個(gè)基類中都包含姓名、年齡、性別、地址、電話等數(shù)據(jù)成員。 Ⅱ.在Teacher類中還包含數(shù)據(jù)成員title(職稱),在Cadre類中還包含數(shù)據(jù)成員post(職務(wù))。在Teacher-Cadre類中還包含數(shù)據(jù)成員wages(工資)。 Ⅲ.在基類中的姓名、年齡、性別、地址、電話等數(shù)據(jù)成員用相同的名字,在引用這些數(shù)據(jù)成員時(shí),指定作用域。Ⅴ.在類體中聲明成員函數(shù),在類外定義成員函數(shù)。 Ⅵ.在派生類Teacher-Cadre的成員函數(shù)show中調(diào)用Teacher類中的display函數(shù),輸出性命、年齡、性別、職稱、地址、電話,然后再用cout語(yǔ)句輸出職務(wù)與工資。 3.程序代碼 實(shí)驗(yàn)10(1) #include Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;} Complex Complex::operator-(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;} Complex Complex::operator*(Complex &c2){Complex c;c.real=real*c2.real-imag*c2.imag;c.imag=imag*c2.real+real*c2.imag;return c;} Complex Complex::operator/(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return c;} void Complex::display(){cout<<“(”< (2) #include double real; double imag;}; Complex Complex::operator+(Complex &c){return Complex(real+c.real,imag+c.imag);} Complex Complex::operator+(int &i){return Complex(real+i,imag);} void Complex::display(){cout<<“(”< Complex operator+(int &i,Complex &c){return Complex(i+c.real,c.imag);} int main(){Complex c1(3,4),c2(5,-10),c3;int i=5;c3=c1+c2;cout<<“c1+c2=”;c3.display();c3=i+c1;cout<<“i+c1=”;c3.display();c3=c1+i;cout<<“c1+i=”;c3.display();return 0;}(3) #include int mat[2][3];}; Matrix::Matrix(){for(int i=0;i<2;i++)for(int j=0;j<3;j++)mat[i][j]=0;} Matrix operator+(Matrix &a,Matrix &b){Matrix c;for(int i=0;i<2;i++)for(int j=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} return c;} void Matrix::input(){cout<<“input value of matrix:”< void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout< #include int num; char name[20]; char sex; float score;}; Student::Student(int n,char nam[],char s,float sco){num=n;strcpy(name,nam);sex=s;score=sco;} class Teacher {public: Teacher(){} Teacher(Student&);Teacher(int n,char nam[],char sex,float pay);void display();private: int num; char name[20]; char sex; float pay;}; Teacher::Teacher(int n,char nam[],char s,float p} {num=n;strcpy(name,nam);sex=s;pay=p;} Teaxher::Teacher(Student& stud){num=stud.get_num();strcpy(name,stud.get_name());sex=stud.get.sex();pay=1500;} void Teacher::display(){cout<<“num:”< #include void get_value() {cin>>num>>name>>sex;} void display() {cout<<”num:“< cout<<”sex:“< int num; char name[10];char sex;}; class Student1:public Student {public: void get_value_1(){get_value();cin>>age>>addr;} void display_1(){cout<<”age:“< char addr[30];}; int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}(2) #include void display();protected: int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:protected Student {public: void get_value_1();void display1();private: int age;char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(3) #include int num; char name[10]; char sex;}; void Student::get_value(){cin>>num>>name>>sex;} void Student::display(){cout<<”num:“< class Student1:public Student {public: void get_value_1();void display1();private: int age; char addr[30];}; void Student1::get_value_1(){get_value();cin>>age>>addr;} void Student1::display1(){cout<<”num:“< int main(){Student1 stud1;stud1.get_value_1();stud1.display1();return 0;}(4) #include Teacher(int,char[],char);void display();private: int num;char name[20];char sex;}; Teacher::Teacher(int n,char nam[],char s){num=n;strcpy(name,nam);sex=s;} void Teacher::display(){cout<<”num:”< class BirthDate {public: BirthDate(int,int,int);void display();void change(int,int,int);private: int year;int month;int day;}; BirthDate::BirthDate(int y,int m,int d){year=y;month=m;day=d;} Void BithDate::display(){cout<<”birthday:”< void BirthDate::change(int y,int m,int d){year=y;month=m;day=d;} class Professor:public Teacher {public: Professor(int,char[],char,int,int,int,float);void display();void change(int,int,int);private: float area;BirthDate birthday;} Professor::Professor(int n,char name[20],char s,int y,int m,int d,float a): Teacher(n,name,s),birthday(y,m,d),area(a){} void Professor::display(){Teacher::display();birthday.display();cout<<”area:”< Int main(){Professor profl(3012,”Zhang”,’f’,1949,10,1,125.4);cout< 4.調(diào)試結(jié)果 實(shí)驗(yàn)10(1)c1+c2=(8,-6i)c1-c2=(-2,14i)c1*c2=(55,-10i)c1/c2=(-0.2,0.4)(2)c1+c2=(8,-6i)i+c1=(8,4i)c1+i=(8,4i) (3) input value of Matrix:11 22 33 44 55 66 input value of Matrix:12 13 14 15 16 17 Matrix a: 11 22 33 44 55 66 Matrix b: 12 13 14 15 16 17 Matrix c=Matrix a + Matrix b : 23 25 47 59 71 83 (4)student1 : num :20010 name:Wang sex:m score;89.5 Teacher2: num:20010 name:Wang sex:m pay:1500 實(shí)驗(yàn)11(1) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (2) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (3) 10101 Li M 20 Beijing num:10101 name:Li sex:M age:20 address:Beijing (4)The original data: num:3012 name:Zhang sex:f area:125.4 The new data: num:3012 name:Zhang sex:f birthday:6/1/1950 area:125.4 5.實(shí)驗(yàn)心得 這一次上機(jī)實(shí)驗(yàn),除了了解到了運(yùn)算符重載的概念和用法,掌握幾種常用的運(yùn)算符重載的方法,了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法,同時(shí)也能了解虛基類的用法,理解繼承與派生的概念。 但是,最主要的,我覺得,是通過(guò)這一次的上機(jī)實(shí)驗(yàn),我了解到,有的實(shí)驗(yàn)本身是沒有程序錯(cuò)誤的,但是,也會(huì)由于實(shí)驗(yàn)環(huán)境的影響而不能正常運(yùn)行。換句話說(shuō),有的程序并不能在Visaul C++的環(huán)境下運(yùn)行,而不是程序自身的問(wèn)題。所以,對(duì)于沒辦法調(diào)試成功的程序,我們也不能一味的認(rèn)為程序有錯(cuò)誤,要學(xué)會(huì)理性的判斷程序的對(duì)錯(cuò),再下結(jié)論。 C++ 實(shí)驗(yàn)總結(jié)報(bào)告 研究課題:圖形編輯器 學(xué) 校:華中科技大學(xué) 院 系: 班 級(jí): 姓 名: 指導(dǎo)老師: 一、實(shí)驗(yàn)?zāi)康?/p> 1.熟悉C++的一些重要性質(zhì),利用封裝、繼承、虛函數(shù)和多態(tài)性等特性,通過(guò)實(shí)驗(yàn)學(xué)習(xí)如何對(duì)各類圖元的屬性和方法進(jìn)行合理的封裝 2.學(xué)習(xí)Microsoft的Visual C++編程工具 3.掌握MFC的相關(guān)知識(shí) 4.掌握基本的文件保存、讀取以及操作封裝技術(shù) 二、實(shí)驗(yàn)?zāi)康?/p> 設(shè)計(jì)一個(gè)簡(jiǎn)單的圖形編輯器 三、實(shí)驗(yàn)所用儀器、設(shè)備 計(jì)算機(jī):PentiumIII 800 以上 256M內(nèi)存 操作系統(tǒng):Windows 2000/XP 開發(fā)集成環(huán)境:Visual C++ 6.0 四、軟件功能簡(jiǎn)介 (注:此軟件是從網(wǎng)上下載得來(lái)) 該軟件具有漢化的菜單界面(仿Windows自帶畫圖軟件),具有文件打開、編輯、保存等功能。編輯部分包括可以在編輯區(qū)域畫直線、圓、矩形、曲線等矢量圖形,可插入文字,可以修改線條的線型、顏色等基本屬性。 五、部分代碼分析 1.直線類代碼: class CCreateLine : public CCommand { private: Position m_begin;// 直線的起點(diǎn) Position m_end;// 直線的終點(diǎn) public: CCreateLine();~CCreateLine(); int GetType();int OnLButtonDown(UINT nFlags, const Position& pos);int OnMouseMove(UINT nFlags, const Position& pos);int OnRButtonDown(UINT nFlags, const Position& pos); int Cancel();};學(xué)習(xí)C++我們最需要理解的就是它面向?qū)ο蟮脑O(shè)計(jì)思想。這種思想可以在類和對(duì)象上得到充分的體現(xiàn)。 類是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心,它實(shí)際上是由用戶定義的一種新的復(fù)雜數(shù)據(jù)類型。它是通過(guò)抽象數(shù)據(jù)類型ADT方法來(lái)實(shí)現(xiàn)的一種數(shù)據(jù)類型,將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起形成一個(gè)集合體。因此,它具有更高的抽象性,實(shí)現(xiàn)了信息的隱藏和封裝。 對(duì)象是某種類的一個(gè)實(shí)例,是類的具體體現(xiàn)。一個(gè)類可以有多個(gè)對(duì)象。 分析這一段代碼,編程者將直線的起始點(diǎn)和終止點(diǎn)設(shè)置為私有成員,這樣做就對(duì)整條直線實(shí)現(xiàn)了隱藏和保護(hù),是面向?qū)ο笾蟹庋b特性的一個(gè)具體體現(xiàn);另外,此函數(shù)中還包含了構(gòu)造函數(shù)與析構(gòu)函數(shù),構(gòu)造函數(shù)完成對(duì)新對(duì)象的初始化工作,析構(gòu)函數(shù)是構(gòu)造函數(shù)的配對(duì)物,它實(shí)現(xiàn)與構(gòu)造函數(shù)相反的功能。另外的幾個(gè)成員函數(shù)名稱形參返回值都與class Ccommand 中的幾個(gè)公有函數(shù)相同,而在class Ccommand中,這幾個(gè)函數(shù)都是虛函數(shù),這是函數(shù)重載,也是多態(tài)性的具體體現(xiàn)。 由這段代碼我們可以了解關(guān)于類和對(duì)象的一些知識(shí),為我們進(jìn)一步了解面向?qū)ο蟪绦蛟O(shè)計(jì)的思想精髓奠定了基礎(chǔ)。 2.對(duì)構(gòu)造函數(shù)和解析函數(shù)的分析 構(gòu)造函數(shù) CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){ m_nStep = 0;// 初始化操作步為 0 } 此構(gòu)造函數(shù)用初始化列表的方式對(duì)直線類的私有成員進(jìn)行初始化,同時(shí)記下操作步m_nStep是直線類從指令類中繼承來(lái)的成員,它在指令類中屬于保護(hù)成員,在直線類中則成為私有成員。這是數(shù)據(jù)共享與數(shù)據(jù)保護(hù)兩者兼顧時(shí)的一種處理方法。 析構(gòu)函數(shù) CCreateLine::~CCreateLine(){ } 此析構(gòu)函數(shù)中沒有任何操作語(yǔ)句,但它并非沒有任何操作。在任何一個(gè)對(duì)象消失時(shí)都要調(diào)用本類的析構(gòu)函數(shù)進(jìn)行掃尾工作。在構(gòu)造對(duì)象時(shí),構(gòu)造函數(shù)分配資源給程序,在對(duì)象作用結(jié)束后,這些資源的釋放就要靠析構(gòu)函數(shù)。當(dāng)然析構(gòu)函數(shù)中也是可以有語(yǔ)句的,當(dāng)需要在對(duì)象消失之前執(zhí)行某種操作時(shí),可以把語(yǔ)句寫在里邊。 3.BOOL Cline::Pick(const Position&pos,const double pick_radius){ Position objPos=pos;BOX2D sourceBox,desBOX;GetBox(&sourceBox);desBox.min[0]=sourceBox.min[0]-pick_radius;desBox.min[1]=sourceBox.min[1]-pick_radius;desBox.max[0]=sourceBox.max[0]+pick_radius;desBox.max[1]=sourceBox.min[1]+pick_radius;if(!objPos.lslnBox(desBox))return FALSE;double angle=::GetAngleToXAxis(m_begin,m_end);Position dp =objPos-m_begin;Double dist = fabs(dp.x*cos(angle)+dp.y*sin(angle)-objPos.Distance(m_begin));if(dist<=pick_radius)return TRUE;return FALSE;} 在閱讀此函數(shù)的源代碼過(guò)程中,我感覺到對(duì)類創(chuàng)建的合理劃分對(duì)整個(gè)程序具有著十分重要的意義。正如上段代碼,它的前提是對(duì)類進(jìn)行了合理的劃分,只有在對(duì)類進(jìn)行了合理的劃分后,我們才能更加高效地處理對(duì)象。所以,我感覺到在學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí),應(yīng)當(dāng)尤為注意類的創(chuàng)建與劃分。 六、個(gè)人學(xué)習(xí)體會(huì) 在學(xué)習(xí)C++以前,我認(rèn)為C++只是在C語(yǔ)言的基礎(chǔ)上的一種延伸,認(rèn)為只要學(xué)過(guò)C語(yǔ)言,就可以用C語(yǔ)言的那種設(shè)計(jì)思想來(lái)學(xué)習(xí)C++、設(shè)計(jì)C++程序。正是由于抱了這種錯(cuò)誤的思想,使我在一開始學(xué)習(xí)C++的時(shí)候遇到了很大的困難,我沒有辦法體會(huì)面向?qū)ο蟮脑O(shè)計(jì)思想,我在學(xué)習(xí)這門課的時(shí)候老是想著實(shí)現(xiàn)這個(gè)函數(shù)功能的具體過(guò)程,而沒太注意對(duì)象分類的重要性。 隨著課程學(xué)習(xí)的深入,我感覺到了利用類和對(duì)象、繼承、封裝等一系列知識(shí)可以把我們程序中很多繁雜、重復(fù)的部分省略掉,還可以解決一些利用面向過(guò)程的設(shè)計(jì)思想無(wú)法解決的問(wèn)題,我自己也試著編寫一些小的C++程序,當(dāng)然在這個(gè)過(guò)程中遇到了很多困難,其中調(diào)試帶來(lái)的困難讓我無(wú)法忘記,在調(diào)試程序的同時(shí),我也總結(jié)出來(lái)了一些調(diào)試的小技巧,讓我在C語(yǔ)言課程設(shè)計(jì)中也受用匪淺。 在學(xué)習(xí)這門課的過(guò)程中,我感受到了自己親自動(dòng)手編程序、調(diào)程序的重要性,我們要熟悉C++的語(yǔ)法、體會(huì)調(diào)試的思想,最好的一個(gè)手段就是自己動(dòng)手編程、調(diào)試,這會(huì)比我們一味的看書效果好得多。另外,我還感覺到一個(gè)好的程序編出來(lái)需要很多人的團(tuán)結(jié)合作。我在檢查自己編寫的程序是否有BUG未被找出的時(shí)候,我會(huì)讓我的同學(xué)作為一個(gè)程序使用者來(lái)找出未發(fā)現(xiàn)的BUG并提出改進(jìn)意見,這讓我們的工作更加高效。 很高興能夠了解到C++的神奇魅力和面向?qū)ο蟪绦蛟O(shè)計(jì)的獨(dú)特思想,它為我今后的程序設(shè)計(jì)奠定了基礎(chǔ)。感謝老師對(duì)我們的悉心教授! P179 5.9.2(11) 1.意圖 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。 2.動(dòng)機(jī) 對(duì)一些類來(lái)說(shuō),只有一個(gè)實(shí)例是很重要的。雖然系統(tǒng)中可以有許多打印機(jī),但卻只應(yīng)該有一個(gè)打印假脫機(jī)(printer spooler),只應(yīng)該有一個(gè)文件系統(tǒng)和一個(gè)窗口管理器。一個(gè)數(shù)字濾波器只能有一個(gè)A / D轉(zhuǎn)換器。一個(gè)會(huì)計(jì)系統(tǒng)只能專用于一個(gè)公司。 我們?cè)趺礃硬拍鼙WC一個(gè)類只有一個(gè)實(shí)例并且這個(gè)實(shí)例易于被訪問(wèn)呢?一個(gè)全局變量使得一個(gè)對(duì)象可以被訪問(wèn),但它不能防止你實(shí)例化多個(gè)對(duì)象。一個(gè)更好的辦法是,讓類自身負(fù)責(zé)保存它的唯一實(shí)例。這個(gè)類可以保證沒有其他實(shí)例可以被創(chuàng)建(通過(guò)截取創(chuàng)建新對(duì)象的請(qǐng)求),并且它可以提供一個(gè)訪問(wèn)該實(shí)例的方法。這就是Singleton模式。 3.適用性 在下面的情況下可以使用Singleton模式.當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問(wèn)點(diǎn)訪問(wèn)它時(shí)。當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過(guò)子類化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。 4.結(jié)構(gòu) 5.參與者 Singleton 定義一個(gè)GetInstance操作,允許客戶訪問(wèn)它的唯一實(shí)例。GetInstance是一個(gè)類操作(即Smalltalk中的一個(gè)類方法和C++中的一個(gè)靜態(tài)成員函數(shù))。可能負(fù)責(zé)創(chuàng)建它自己的唯一實(shí)例。 6.協(xié)作 客戶只能通過(guò)Singleton的GetInstance操作訪問(wèn)一個(gè)Singleton的實(shí)例。 7.效果 Singleton模式有許多優(yōu)點(diǎn): 1)對(duì)唯一實(shí)例的受控訪問(wèn)因?yàn)镾ingleton類封裝它的唯一實(shí)例,所以它可以嚴(yán)格的控制客戶怎樣以及何時(shí)訪問(wèn)它。 2)縮小名空間Singleton模式是對(duì)全局變量的一種改進(jìn)。它避免了那些存儲(chǔ)唯一實(shí)例的全局變量污染名空間。 3)允許對(duì)操作和表示的精化Singleton類可以有子類,而且用這個(gè)擴(kuò)展類的實(shí)例來(lái)配置一個(gè)應(yīng)用是很容易的。你可以用你所需要的類的實(shí)例在運(yùn)行時(shí)刻配置應(yīng)用。 4)允許可變數(shù)目的實(shí)例這個(gè)模式使得你易于改變你的想法,并允許Singleton類的多個(gè)實(shí)例。此外,你可以用相同的方法來(lái)控制應(yīng)用所使用的實(shí)例的數(shù)目。只有允許訪問(wèn)Singleton實(shí)例的操作需要改變。 5)比類操作更靈活另一種封裝單件功能的方式是使用類操作(即C++中的靜態(tài)成員函數(shù)或者是Smalltalk中的類方法)。但這兩種語(yǔ)言技術(shù)都難以改變?cè)O(shè)計(jì)以允許一個(gè)類有多個(gè)實(shí)例。 此外,C++中的靜態(tài)成員函數(shù)不是虛函數(shù),因此子類不能多態(tài)的重定義它們。 8.實(shí)現(xiàn) class Singleton { static std::auto_ptr protected: //prevent user making our any instance by manually //構(gòu)造函數(shù)是保護(hù)類型的。 Singleton(){} public: ~Singleton(){} //Return this singleton class' instance pointer static Singleton* Instance() { if(!m_pInstance.get()) { m_pInstance = std::auto_ptr } return m_pInstance.get(); } }; 怎樣來(lái)使用它呢?不要試圖從這個(gè)類派生你的單件子類,那樣的結(jié)果是不妥當(dāng)?shù)模绻阈枰鄠€(gè)單件子類,還是使用下面的宏定義更為妥當(dāng): #define DEFINE_SINGLETON(cls) private: static std::auto_ptr protected: cls(){} public: ~cls(){} static cls* Instance(){ if(!m_pInstance.get()){ m_pInstance = std::auto_ptr } return m_pInstance.get(); } #define IMPLEMENT_SINGLETON(cls) std::auto_ptr 假定你需要實(shí)現(xiàn)一個(gè)單件類YY,這樣書寫: class YY { DEFINE_SINGLETON(YY); public: //your interfaces here...}; 在cpp文件中,書寫: IMPLEMENT_SINGLETON(YY); 需要引入這個(gè)類的實(shí)例的時(shí)候,使用這樣的語(yǔ)句: YY* pYY = YY::Instance(); 這,就是全部。 如果需要定義其他的單件類,重復(fù)上面的定義,就可以了。 當(dāng)想集中管理一個(gè)應(yīng)用程序所需的所有配置時(shí),可以聲明一個(gè)CToolsOptions的類,其中包含配置屬性集合。對(duì)于這個(gè)類的實(shí)例,顯然是一個(gè)實(shí)例就夠了;當(dāng)編寫繪圖程序時(shí),考慮繪制矩形,圓形等分別使用CGraphTool派生的工具類,每個(gè)派生類負(fù)責(zé)處理具體的繪制動(dòng)作和相關(guān)的UI相應(yīng)邏輯。這些工具類典型的在被用戶選擇工具欄的圖元按鈕時(shí)被選中。依照這種模式,你應(yīng)該對(duì)所有的圖元工具從事注冊(cè)工作,使得繪圖程序了解運(yùn)行時(shí)刻可以使用那些圖元工具。同樣的,負(fù)責(zé)管理注冊(cè)信息的這個(gè)管理器也只需 P2467.6.2(1) 必須把它作為類成員函數(shù)的運(yùn)算符有: (),[],->和任何賦值運(yùn)算符,重載這些運(yùn)算符時(shí)必須把操作符函數(shù)聲明為類的成員函數(shù) 什么時(shí)候定義類成員操作符重載,什么時(shí)候定義非類成員操作符重載? 答:(1)如果一個(gè)重載操作符是類成員,那么只有當(dāng)跟它一起使用的左操作數(shù)是該類對(duì)象時(shí),它才會(huì)被調(diào)用,如果該操作符的左操作數(shù)必須是其他類型,那么重載操作符必須是非類成員操作符重載。 (2)C++要求,賦值(=),下標(biāo)([ ]),調(diào)用(())和成員訪問(wèn)箭頭(->)操作符必須被指定為類成員操作符,否則錯(cuò)誤。第二篇:C++上機(jī)實(shí)驗(yàn)報(bào)告
第三篇:C++上機(jī)實(shí)驗(yàn)報(bào)告
第四篇:華中科技大學(xué)C++實(shí)驗(yàn)總結(jié)報(bào)告(圖形編輯器)
第五篇:c++作業(yè)