東北大學軟件學院C++實驗報告_第1頁
東北大學軟件學院C++實驗報告_第2頁
東北大學軟件學院C++實驗報告_第3頁
東北大學軟件學院C++實驗報告_第4頁
東北大學軟件學院C++實驗報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-.z.課程B080101020《C++程序設計》實驗報告**班級指導教師實驗名稱《C++程序設計》綜合實驗開發(fā)與總結(jié)開設學期2016-2017學年第一學期開設時間第15周——第18周報告日期****評定成績評定人***評定日期2016-01-12東北大學軟件學院-.z.1.實驗目的實驗一學習編寫簡單的C++程序,并掌握C++程序的基本格式與規(guī)。練習重載函數(shù)的使用,掌握指針的使用方法。學習標準輸人輸出及格式控制。學習使用VC++的debug調(diào)試功能,使用stepinto追蹤到函數(shù)部。實驗二學習并掌握類與對象的定義、使用、聲明。學習具有不同屬性的數(shù)據(jù)成員與成員函數(shù)的訪問方式。理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義與執(zhí)行過程。理解什么是運算符重載,掌握運算符重載的方法實驗三學習定義和使用類的繼承關系,定義派生類。熟悉不同繼承方式下對基類成員的訪問控制。學習使用虛函數(shù)實現(xiàn)動態(tài)多態(tài)性。學習利用虛基類解決二義性問題。實驗四加強對模板相關概念的理解,熟悉模板編程的語法。學習編寫簡單的函數(shù)模板和類模板。理解STL中容器、算法、迭代器的等概念,明確它們之間的關系。掌握STL中Vector容器的使用方法。2.實驗環(huán)境編譯器:MicrosoftVisualC++6.0操作系統(tǒng):Windows103.實驗容與實驗過程及分析實驗一項目一:容:使用動態(tài)數(shù)組完成編寫并測試3*3矩陣轉(zhuǎn)置函數(shù),使用數(shù)組保存3*3矩陣,使用指針實現(xiàn)函數(shù)的功能。代碼:main(){ inti,j;int**p;p=newint*[3]; cout<<"輸入矩陣的元素:"<<endl; for(i=0;i<3;i++) { p[i]=newint[3]; for(j=0;j<3;j++) { cin>>p[i][j]; } } transpose(p); cout<<"轉(zhuǎn)置后的矩陣的為:"<<endl; for(i=0;i<3;i++) { for(j=0;j<3;j++) cout<<p[i][j]<<""; cout<<endl; } delete[]p;}voidtranspose(int**matri*){ inti,k,j; for(i=0;i<3;i++) { for(j=0;j<3;j++){ if(j>i){ k=matri*[j][i]; matri*[j][i]=matri*[i][j]; matri*[i][j]=k; } } }}運行結(jié)果:總結(jié): 傳遞二維數(shù)組時候通過指針傳遞,可以對數(shù)組進行修改,方便了許多。項目二:容:編寫程序,讀寫指定的文件,在每一行前加行號后,將結(jié)果輸出到屏幕代碼:voidwrite(){ ofstreamout("test.t*t"); if(out.is_open()) { out<<"第一行\(zhòng)n"; out<<"第二行\(zhòng)n"; out<<"第三行\(zhòng)n"; out<<"第四行\(zhòng)n"; out<<"第五行\(zhòng)n"; out<<"第六行\(zhòng)n"; } out.close();}voidread(){ charbuffer[88]; ifstreamin("test.t*t"); if(!in.is_open()) { cout<<"Erroropeningfile"; e*it(1); } while(!in.eof()) { in.getline(buffer,80); cout<<buffer<<endl; } in.close();}voidmain(){ cout<<"寫文件"<<endl; write(); cout<<"讀文件"<<endl; read(); system("pause");}運行結(jié)果:總結(jié):學會了C++如何進行文件讀寫操作。實驗二項目一:容:以成員函數(shù)方式重載的“+”操作符的原型為:CPointCPoint::operator+(CPointpt);以全局函數(shù)方式重載的“-”操作符的原型為:CPointoperator-(CPointpt1,CPointpt2);分析以成員函數(shù)方式和全局函數(shù)方式重載運行符的異同點。重載的“>>”操作符的原型為:istream&operator>>(istream&,CPoint&);重載的“<<”操作符的原型為:ostream&operator>>(ostream&,CPoint);思考一下,重載的“>>”操作符和“<<”操作符能否作為CPoint類的成員函數(shù)來實現(xiàn)。代碼:*include<iostream.h>*include<math.h>classCPoint{private: int*,y; staticintnCount;//nCount用于保存點的個數(shù)public: CPoint(intp*=0,intpy=0):*(p*),y(py) { }//構(gòu)造函數(shù),這個地方一定要寫函數(shù)體容,不然沒有初始化的話會導致運行出錯。 //CPoint(CPoint&); ~CPoint(){}//這是析構(gòu)函數(shù) intGET*()const { return*; } intGETY()const { returny; } voidSet*(inta) { *=a; } voidSetY(intb) { y=b; } voidShowPoint() { cout<<"("<<*<<","<<y<<")"; } CPointoperator+(CPoint&cp2) { returnCPoint(GET*()+cp2.GET*(),GETY()+cp2.GETY()); }; friendCPointoperator-(CPoint&cp1,CPoint&cp2);//聲明為友元函數(shù) //輸入輸出運算符只能用友元函數(shù)重載 friendostream&operator<<(ostream&os,constCPoint&c);friendistream&operator>>(istream&is,CPoint&c);};CPointoperator-(CPoint&cp1,CPoint&cp2){ returnCPoint(cp1.*-cp2.*,cp1.GETY()-cp2.GETY());}//不要逗號ostream&operator<<(ostream&os,constCPoint&c){ cout<<"重載<<直接輸出對象得到:"<<"("<<c.GET*()<<","<<c.GETY()<<")"<<endl; returnos;}istream&operator>>(istream&is,CPoint&c){is>>c.*>>c.y;returnis;}classCLine{private: CPointpt1,pt2;//pt1和pt2分別代表該線段的起點和終點public: CLine(){}//構(gòu)造函數(shù) CLine(int*1,inty1,int*2,inty2) :pt1(*1,y1),pt2(*2,y2) { }//必須以參數(shù)列表的形式來寫,這樣才能在聲明的時候即初始化 CLine(CPointp1,CPointp2) :pt1(p1),pt2(p2) { }//必須以參數(shù)列表的形式來寫,這樣才能在聲明的時候即初始化 doubleDistance() { inta=pt1.GET*()-pt2.GET*(); intb=pt1.GETY()-pt2.GETY(); doubledistance=sqrt(a*a+b*b); returndistance; }//計算該線段長度的成員函數(shù) voidShowLine() { pt1.ShowPoint(); cout<<"-"; pt2.ShowPoint(); }};intmain(){ CPointcp1(2,4); CPointcp2(3,6); CPointcp; cout<<"兩個點分別是"; cp1.ShowPoint(); cp2.ShowPoint(); cp=cp1+cp2;//兩個點相加 cout<<endl; cout<<"兩個點相加的結(jié)果是"; cp.ShowPoint(); cp=cp1-cp2;//兩個點相減 cout<<"兩個點相減的結(jié)果是"; cp.ShowPoint(); cout<<endl; CLineline1(1,3,5,0); CLineline2(cp1,cp2); cout<<"線段1是"; line1.ShowLine(); cout<<endl; cout<<"線段2是"; line2.ShowLine(); cout<<endl<<"長度為"<<line1.Distance()<<endl; cout<<"重載>>直接創(chuàng)建一個點,請輸入兩個值:"; CPointLoadPoint; cin>>LoadPoint; cout<<LoadPoint;//重載<<直接輸出對象 return0;}運行結(jié)果:總結(jié):通過C++重載運算符的操作,可以讓編程者自定義各個操作符的運算規(guī)則,簡化了程序的編寫邏輯和過程。實驗三項目一:容:使用實驗2中的CPoint類,定義“空間中點”類如下:classCThreePoint:publicCPoint{private: intz;public: CThreePoint(); CThreePoint(int,int,int); intGetZ(); voidSetZ(intpz); virtualvoidShowPoint();};完成該類中各成員函數(shù)的定義。并利用VC調(diào)試工具觀察含有繼承關系類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。代碼:*include<iostream.h>*include<math.h>classCPoint{private: int*,y; staticintnCount;//nCount用于保存點的個數(shù)public: CPoint(intp*=0,intpy=0):*(p*),y(py) { }//構(gòu)造函數(shù),這個地方一定要寫函數(shù)體容,不然沒有初始化的話會導致運行出錯。 //CPoint(CPoint&); ~CPoint(){}//這是析構(gòu)函數(shù) intGet*()const { return*; } intGetY()const { returny; } voidSet*(inta) { *=a; } voidSetY(intb) { y=b; } virtual voidShowPoint()//只有把它設置為虛函數(shù)時候才會出現(xiàn)(8,9)(3,2,5)的輸出結(jié)果。否則都是(8,9)(3,2) { cout<<"("<<*<<","<<y<<")"; }};classCThreePoint:publicCPoint{private: intz;public: CThreePoint(){}//無參構(gòu)造 CThreePoint(intp*=0,intpy=0,intpz=0) { Set*(p*); SetY(py); z=pz; } intGetZ(){ returnz;} voidSetZ(intpz){ z=pz;} virtualvoidShowPoint() { cout<<"("<<Get*()<<","<<GetY()<<","<<z<<")"; }};intmain(){ CPointcp(8,9); CThreePointctp(3,2,5); CPoint*pt=&cp; pt->ShowPoint(); pt=&ctp; pt->ShowPoint(); return0;}運行結(jié)果:總結(jié):C++中的繼承、虛函數(shù),多態(tài),數(shù)據(jù)的封裝,構(gòu)造函數(shù)的實現(xiàn)等等各種面向?qū)ο蟪绦蛟O計的特性,方便進行現(xiàn)象化描述,通過對這一部分的學習,對于C++中的類的概念進一步鞏固,基于對JAVA的學習,現(xiàn)在對于C++中多態(tài)、繼承有了較多的了解。項目二:容:定義一個車(vehicle)基類,具有Ma*Speed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。代碼:*include<iostream.h>classvehicle{public: intMa*Speed; intWeight;virtual voidRun(){ //執(zhí)行該方法則開始運行 cout<<"開始運行,速度為"<<Ma*Speed<<endl; }virtual voidStop() { //執(zhí)行則停止運行 cout<<"停止運行"<<endl; }};classbicycle:virtualpublicvehicle{public: intHeight;};classmotorcar:virtualpublicvehicle{public: intSeatNum;};classmotorcycle:publicbicycle,publicmotorcar{public:intstyle;};main(){vehiclev;v.Ma*Speed=10;bicycleb;b.Ma*Speed=5;motorcarmcar;mcar.Ma*Speed=20;motorcyclemb;mb.Ma*Speed=15;//如果不設置成為虛基類的話則該行代碼編譯不通過vehicle*pt=&v;cout<<"vehicle";pt->Run();pt->Stop();pt=&b;cout<<"bicycle";pt->Run();pt->Stop();pt=&mcar;cout<<"motorcar";pt->Run();pt->Stop();pt=&mb;cout<<"motorcycle";pt->Run();pt->Stop();}/**vehicle開始運行,速度為10停止運行bicycle開始運行,速度為5停止運行motorcar開始運行,速度為20停止運行motorcycle開始運行,速度為15停止運行*/運行結(jié)果:總結(jié): 學習了虛函數(shù)以及虛基類的使用以及作用。虛函數(shù)、虛基類的使用對于C++的多態(tài)繼承有更大的便利性。實驗四項目一:容:編寫一個函數(shù)模板,要求它返回兩個值中的最小者。但同時要確保正確處理字符串。代碼:*include<iostream>*include<cstring>usingnamespacestd;template<typenameT>Tmin(Ta,Tb){ Tc; c=(a<b)"a:b; returnc;}char*min(char*a,char*b){ returnstrcmp(a,b)<0"a:b;}voidmain(){ cout<<"請輸入兩個整數(shù):"<<endl; chart1[100],t2[100]; cin>>t1>>t2; cout<<"最小的是:"<<min(t1,t2)<<endl; system("pause");}運行結(jié)果:總結(jié): C++中模板的一個作用就是對同一類型的函數(shù),進行不同參數(shù)類型的適配,比較人性化。同時也方便了編程者進行對類庫的封裝,寫出一個框架來。項目二:容:編寫一程序,讓用戶自由地從鍵盤上輸入整數(shù),直到輸入數(shù)字0時結(jié)束。把用戶輸入的數(shù)據(jù)保存在模板類Vector<int>定義的對象中,并對用戶輸入的所有數(shù)進行排序輸出。在向顯示器進行輸出時,要求用一下3種方式實現(xiàn):僅使用Vector<int>的相關成員函數(shù),不使用迭代器進行輸出;使用迭代器自己編程輸出;使用STL提供的通用算法for_each進行輸出。代碼:*include<vector>*include<algorithm>*include<iostream>usingnamespacestd;voidshow(intn);voidmain(){ vector<int>a; intn=0; do { cin>>n; a.push_back(n); }while(n!=0); for(int*=0;(unsignedint)*<a.size();*++) for(inty=*;(unsignedint)y<a.size();y++) if(a[*]>a[y]) { intz=a[*]; a[*]=a[y]; a[y]=z; } for(inti=0;(unsignedint)i<=a.size()-1;i++) cout<<a[i]<<""; cout<<endl; vector<int>::iteratorstart=a.begin(); vector<int>::iteratorend=a.end(); while(start!=end) { cout<<*start<<""; ++start; } cout<<endl; for_each(a.begin(),a.end(),show); cout<<endl;}voidshow(intn){ cout<<n<<"";}運行結(jié)果:(輸出結(jié)果包含三種實現(xiàn)方式)總結(jié): C++中對于數(shù)據(jù)的存儲有較多種方式,這里實現(xiàn)一種存儲并排序輸出。掌握了Vector的使用及其技巧。4.實驗總結(jié)從接觸的第一門面向?qū)ο蟮恼Z言JAVA開始,就對這種以對象形式來編程的方式產(chǎn)生了興趣?,F(xiàn)在,又學習了C++,我對C++這種面向?qū)ο蟮木幊陶Z言的語法有了大致的掌握,由于學過JAVA語言,所以面向?qū)ο蟮乃枷胝莆盏牟皇呛苈?,但是比較吃力的就是C++中既融合了C的指針思想,又具有JAVA的引用變量思想,還有就是析構(gòu)函數(shù)的引入,編程人員自己在存中分配存,而且用完之后要自己調(diào)用相應的函數(shù)去釋放,所以操作實現(xiàn)起來稍顯困難,不過這也是C++不同于JAVA之處——對機器配置要求不是太高。C++編程的一些基本方法,是融合了C語言以及JAVA的,學會了C++語言的基本語法,面向?qū)ο箢惖脑O計思想,我也還學會了如何自己從網(wǎng)上尋找資源,如何自學新東西,相信這次實驗學到的知識在我未來的學習個工作道路上都會是寶貴的財富,并且會在以后的編程之路上給予我較大的幫助。5.思考題實驗一:重載函數(shù)是通過什么來區(qū)分?答:參數(shù)類型、數(shù)量、順序。C++提供的輸入輸出操作與C語言的輸入輸出操作的異同點?答:同:都可以通過輸入設備輸入并將數(shù)據(jù)顯示出來。異:C++不用指定輸出類型。C++都定義了那些流?他們分別與什么設備相連?答:C++定義了io流,與輸入輸出設備相連。實驗二:類和結(jié)構(gòu)體的區(qū)別是什么?答:成員訪問權(quán)限不同,繼承方式不同。結(jié)構(gòu)體不提供繼承機制,類提供繼承機制,實現(xiàn)代碼復用;類可以實現(xiàn)多態(tài),結(jié)構(gòu)體不支持。結(jié)構(gòu)體中的數(shù)據(jù)默認方式是public的,而類是private的。類的成員函數(shù)與普通的函數(shù)有何區(qū)別?答:類的成員函數(shù)是成員的特有方法,而普通函數(shù)能夠隨意被調(diào)用。構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用是什么?答:初始化對象,分配存空間,釋放存空間。類的訪問控制權(quán)限有何意義?答:保護成員變量,可以將類中的具體細節(jié)封裝起來。實驗三:C++中有哪幾種派生方式?每種方式的派生類對基類成員的繼承和訪問控制屬性是什么樣的?答:有public,private,protected派生。 public派生,在派生類里和外面都可以直接調(diào)用基類的公有部分。 protected保護派生,在派生類里可以直接調(diào)用,但是在派生外面不可以調(diào)用

溫馨提示

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

評論

0/150

提交評論