東北大學(xué)軟件學(xué)院C++實(shí)驗(yàn)報(bào)告_第1頁(yè)
東北大學(xué)軟件學(xué)院C++實(shí)驗(yàn)報(bào)告_第2頁(yè)
東北大學(xué)軟件學(xué)院C++實(shí)驗(yàn)報(bào)告_第3頁(yè)
東北大學(xué)軟件學(xué)院C++實(shí)驗(yàn)報(bào)告_第4頁(yè)
東北大學(xué)軟件學(xué)院C++實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論