欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      華中科技大學(xué)c++第3次上機(jī)作業(yè)

      時(shí)間:2019-05-15 08:52:03下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《華中科技大學(xué)c++第3次上機(jī)作業(yè)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《華中科技大學(xué)c++第3次上機(jī)作業(yè)》。

      第一篇:華中科技大學(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 #include using namespace std;int main(){ float x0,x1,a;

      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 #include using namespace std;int main(){ float x0,x1,a;

      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 #include using namespace std;int main(){

      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 using namespace std;int main(){ cout<<“請(qǐng)輸入需要判斷的正整數(shù)”<>a;g=a%10;s=(a/10)%10;b=a/100;if(a==g*g*g+s*s*s+b*b*b)

      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 #include using namespace std;int main(){ int i,n,m=0,s=0,a;for(i=3;i<=100;i++){

      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 using namespace std;int main(){ cout<<“請(qǐng)輸入所需統(tǒng)計(jì)的數(shù)字的個(gè)數(shù)”<>n;cout<<“請(qǐng)輸入所需統(tǒng)計(jì)的數(shù)據(jù)”<

      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 #include using namespace std;int main(){ int v1=0,v2=0,i,p1,p2;while(v1<3&&v2<3){

      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 using namespace std;int main(){

      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 using namespace std;int main(){ int h,j,x,z;for(h=1;h<17;h++){

      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 using namespace std;void main(){ int s,i=0,j,a,b[100];cout<<“請(qǐng)輸入需要轉(zhuǎn)化的十進(jìn)制整數(shù)”<>s;while(s!=0){ a=s/2;b[i]=s%2;s=a;i++;} for(j=i-1;j>=0;j--)cout<

      解決本題的算法思路描述

      十進(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 #include using namespace std;double main(){ int m=0;double s,a;cout<<“請(qǐng)輸入需要轉(zhuǎn)化的十進(jìn)制定點(diǎn)小數(shù)”<>s;cout<<“結(jié)果為0.”;while(m<=8){

      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 #include using namespace std;int main(){ double x;int z=0,f=0,l=0,n,i=1,m;cout<<“請(qǐng)輸入所需統(tǒng)計(jì)的數(shù)字的個(gè)數(shù)”<>n;ifstream in;in.open(“d:in.txt”);while(i<=n&&in.eof()==0){

      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 using namespace std;int main()

      {

      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)練掌握原理 重新閱讀課本。

      第二篇:C++上機(jī)實(shí)驗(yàn)報(bào)告

      第二次上機(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 using namespace std;class A { public:

      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 using namespace std;class Person {

      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)告

      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 using namespace std;class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator +(Complex &c2);Complex operator-(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private: double real;double imag;};

      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 using namespace std;class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2);Complex operator+(int &i);friend Complex operator+(int &,Complex &);void display();private:

      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 using namespace std;class Matrix {public: Matrix();friend Matrix operator+(Matrix &,Matrix &);void input();void display();private:

      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:”<>mat[i][j];}

      void Matrix::display(){for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout<

      #include using namespace std;class Student {public: Student(int,char[],char,float);int get_num(){return num;} char * get_name(){return name;} char get_sex(){return sex;} void display(){cout<<“num:”<

      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:”<int main(){Teacher teacher1(10001,”Li“,'f',1234.5),teacher2;Student student1(20010,”Wang“,'m',89.5);cout<<”student1:“<

      #include using namespace std;class Student {public:

      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 using namespace std;class Student {public: void get_value();

      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 using namespace std;class Student {public: void get_value();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: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 #include using namespace std;class Teacher {public:

      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é)論。

      第四篇:華中科技大學(xué)C++實(shí)驗(yàn)總結(jié)報(bào)告(圖形編輯器)

      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ì)我們的悉心教授!

      第五篇:c++作業(yè)

      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 m_pInstance;

      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(new Singleton());

      }

      return m_pInstance.get();

      }

      };

      怎樣來(lái)使用它呢?不要試圖從這個(gè)類派生你的單件子類,那樣的結(jié)果是不妥當(dāng)?shù)模绻阈枰鄠€(gè)單件子類,還是使用下面的宏定義更為妥當(dāng):

      #define DEFINE_SINGLETON(cls)

      private:

      static std::auto_ptr m_pInstance;

      protected:

      cls(){}

      public:

      ~cls(){}

      static cls* Instance(){

      if(!m_pInstance.get()){

      m_pInstance = std::auto_ptr(new cls());

      }

      return m_pInstance.get();

      }

      #define IMPLEMENT_SINGLETON(cls)

      std::auto_ptr cls::m_pInstance(NULL);

      假定你需要實(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ò)誤。

      下載華中科技大學(xué)c++第3次上機(jī)作業(yè)word格式文檔
      下載華中科技大學(xué)c++第3次上機(jī)作業(yè).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        華中科技大學(xué)個(gè)人簡(jiǎn)歷

        柳如白 應(yīng)屆畢業(yè)生 | 男 |25歲(1985年6月1日) 居住地:武漢 電 話:139XXXXXXXX(手機(jī)) E-mail:Liurubai@51job.com最近工作 [ 1個(gè)月] 公 司: XX技術(shù)有限公司 行 業(yè): 通信/電信/網(wǎng)絡(luò)設(shè)備......

        C++上機(jī)實(shí)驗(yàn)報(bào)告5(定稿)

        C++程序?qū)嶒?yàn)報(bào)告 實(shí)驗(yàn)五繼承與派生 實(shí)驗(yàn)?zāi)康?1.學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類 2.熟悉不同繼承方式下對(duì)基類成員的訪問(wèn)控制 3.學(xué)習(xí)利用虛基類解決二義性問(wèn)題 實(shí)驗(yàn)要......

        武漢大學(xué)c++第一次上機(jī)試題

        實(shí)驗(yàn)一 開發(fā)環(huán)境與簡(jiǎn)單C++程序一. 實(shí)驗(yàn)?zāi)康?. 熟悉VC++開發(fā)環(huán)境,能夠使用開發(fā)環(huán)境提供的工具創(chuàng)建項(xiàng)目,編輯源程序,編譯、運(yùn)行程序。2. 熟悉常見的編譯錯(cuò)誤及其改正方法。3. 掌......

        華中科技大學(xué)[合集五篇]

        華中科技大學(xué) 卓越工程師教育培養(yǎng)計(jì)劃工作進(jìn)展報(bào)告 (2012年度) 一、總體情況 我校卓越工程師培養(yǎng)計(jì)劃的總體思路為“夯實(shí)基礎(chǔ)、能力導(dǎo)向、創(chuàng)新機(jī)制、校企聯(lián)動(dòng)、個(gè)性培養(yǎng)、拔尖......

        華中科技大學(xué)組織結(jié)構(gòu)圖

        華中科技大學(xué)組織結(jié)構(gòu)圖 華中科技大學(xué)職能部處各院系直屬單位附屬單位附屬醫(yī)院產(chǎn)業(yè)集團(tuán)后勤集團(tuán)學(xué)校辦公室紀(jì)委辦公室校團(tuán)委黨委宣傳部教務(wù)處其他24職能部土木工程與力學(xué)學(xué)......

        華中科技大學(xué)開學(xué)典禮通知

        華中科技大學(xué)MBA山東班2011級(jí)開學(xué)典禮通知同學(xué)們,開學(xué)啦! 首先,祝賀您成為華中科技大學(xué)MBA大家庭中的一員。 MBA作為培養(yǎng)務(wù)實(shí)型、復(fù)合型、高層次的企業(yè)管理人才的專業(yè)性研究生......

        985大學(xué)--華中科技大學(xué)

        華中科技大學(xué)是國(guó)家教育部直屬的全國(guó)重點(diǎn)大學(xué),由原華中理工大學(xué)、同濟(jì)醫(yī)科大學(xué)、武漢城市建設(shè)學(xué)院于2000年5月26日合并成立,是首批列入國(guó)家“211工程”重點(diǎn)建設(shè)和國(guó)家“985工......

        華中科技大學(xué)土木工程畢業(yè)論文

        華 中 科 技 大 學(xué) 畢 業(yè) 設(shè) 計(jì) 論 文(上冊(cè)) 華中科技大學(xué)土木工程2004級(jí)畢業(yè)設(shè)計(jì) ——綜合樓計(jì)算書(上冊(cè))摘要 本次設(shè)計(jì)的是綜合樓。該工程的建筑面積約為8000m2,共8層,局部9層,一......