




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程編號:B080101020C+程序設計實驗報告姓名學號班級指導教師實驗名稱C+程序設計綜合實驗開發(fā)與總結開設學期2016-2017學年第一學期開設時間第15周第18周報告日期XXXX評定成績評 定人XXX評定日期2016-01-12東北大學軟件學院東北大學軟件學院C+程序設計實驗報告東北大學軟件學院1.實驗目的實驗一1)學習編寫簡單的C+程序,并掌握C+程序的基本格式與規(guī)范。2)練習重載函數(shù)的使用,掌握指針的使用方法。3)學習標準輸人輸出及格式控制。4)學習使用VC +的debug調試功能,使用step into追蹤到函數(shù)內部。實驗二1)學習并掌握類與對象的定義、使用、聲明。2)學習具有不
2、同屬性的數(shù)據(jù)成員與成員函數(shù)的訪問方式。3)理解構造函數(shù)和析構函數(shù)的定義與執(zhí)行過程。4)理解什么是運算符重載,掌握運算符重載的方法實驗三1)學習定義和使用類的繼承關系,定義派生類。2)熟悉不同繼承方式下對基類成員的訪問控制。3)學習使用虛函數(shù)實現(xiàn)動態(tài)多態(tài)性。4)學習利用虛基類解決二義性問題。實驗四1)加強對模板相關概念的理解,熟悉模板編程的語法。2)學習編寫簡單的函數(shù)模板和類模板。3)理解STL中容器、算法、迭代器的等概念,明確它們之間的關系。4)掌握STL中Vector容器的使用方法。2.實驗環(huán)境編譯器:Microsoft Visual C+ 6.0操作系統(tǒng):Windows 10東北大學軟件學
3、院C+程序設計實驗報告東北大學軟件學院3.實驗內容與實驗過程及分析實驗一項目一:內容:使用動態(tài)數(shù)組完成編寫并測試3X3矩陣轉置函數(shù),使用數(shù)組保存3X3矩陣,使用指針 實現(xiàn)函數(shù)的功能。代碼:main()(int i,j;int *p;p=new int*3;8a輸入矩陣的元素:endl;for(i=0;i3;i+)(pi=new int3;for(j=0;jpij;)transpose(p);cout 轉置后的矩陣的為: endl;for(i=0; i3; i+)(for O0; j3; j+)cout pij ;cout endl;)delete p;)void transpose (int
4、*matrix)(int i,k,j;for(i=0;i3;i+)(for(j=0;ji)k=matrixji;matrixji=matrixij;matrixij=k;東北大學軟件學院C+程序設計實驗報告東北大學軟件學院)運行結果: 1 +expe rie n 11 |l a b I _4Debu g I a b I _4.exer輸入矩陣的元素:2 4 67 3 19 6 7轉置后的矩陣的為:2 7 94 3 66 1 7Press any key to continue總結:傳遞二維數(shù)組時候通過指針傳遞,可以對數(shù)組進行修改,方便了許多。項目二:內容:編寫程序,讀寫指定的文件,在每一行前加
5、行號后,將結果輸出到屏幕 代碼:void write()(ofstream out(test.txt);if (out.is_open()(out 第一行 n;out 第二行 n”;out 第三行也;out 第四行n;out 第五行 n;out 第六行n;)out.close();)void read()(char buffer88;ifstream in(test.txt);if (!in.is_open()(cout Error opening file;exit(1);東北大學軟件學院C+程序設計實驗報告東北大學軟件學院while (!in.eof()(in.getline(buffer
6、, 80);cout buffer endl;)in.close();)void main()(cout 寫文件 endl;write();cout 讀文件 mi ir lv -111 i r i iEfi i-irJ-3. -1 gi i-r itest txt -記事本文件編相格式Q 亙看(V)幫助(H)行行行行行行 一二三四五六 第第第第第第行行行行行行 一二三四五六 第第第第第第總結:學會了 C+如何進行文件讀寫操作。實驗二項目一:內容:以成員函數(shù)方式重載的“+”操作符的原型為:CPoint CPoint:operator+ (CPoint pt);以 全局函數(shù)方式重載的“-”操作符的
7、原型為:CPoint operator- (CPoint pt1, CPoint pt2);分析以東北大學軟件學院C+程序設計實驗報告東北大學軟件學院成員函數(shù)方式和全局函數(shù)方式重載運行符的異同點。重載的“”操作符的原型為:istream& operator(istream&, CPoint&);重載的“(ostream&, CPoint);思考一下,重載的“”操作符和“”操作符能否作為CPoint類的成員函數(shù)來實 現(xiàn)。代碼:#include#includeclass CPoint(private:int x,y;static int nCount ;/ nCount用于保存點的個數(shù)public
8、:CPoint(int px=0,int py=0):x(px),y(py) (構造函數(shù),這個地方一定要寫函數(shù)體內容,不然沒有初始化的話會導致運行出錯。 /CPoint(CPoint&);CPoint()/這是析構函數(shù)int GETX() constreturn x;int GETY() constreturn y;void SetX(int a)x=a;void SetY(int b)y=b;void ShowPoint()cout(x,y);CPoint operator+ (CPoint& cp2) return CPoint(GETX()+cp2.GETX(),GETY()+cp2.G
9、ETY();friend CPoint operator-(CPoint& cp1,CPoint& cp2);/聲明為友元函數(shù)C+程序設計實驗報告東北大學軟件學院輸入輸出運算符只能用友元函數(shù)重載friend ostream &operator(istream &is,CPoint &c););CPoint operator-(CPoint& cp1,CPoint& cp2) (return CPoint(cp1.x-cp2.x,cp1.GETY()-cp2.GETY();不要逗號ostream & operator(ostream &os,const CPoint &c) (cout 重載 直
10、接輸出對象得到: (c,GETX(),c,GETY()(istream &is,CPoint &c) (is c.xc.y;return is; class CLine ( private:CPoint pt1, pt2;/pt1和pt2分別代表該線段的起點和終點public:CLine()構造函數(shù)CLine(int x1,int y1,int x2,int y2):pt1(x1,y1),pt2(x2,y2)必須以參數(shù)列表的形式來寫,這樣才能在聲明的時候即初始化CLine(CPoint p1,CPoint p2) :pt1(p1),pt2(p2)必須以參數(shù)列表的形式來寫,這樣才能在聲明的時候即
11、初始化 double Distance()int a=pt1.GETX()-pt2.GETX();int b=pt1.GETY()-pt2.GETY();double distance=sqrt(a*a+b*b);return distance; 計算該線段長度的成員函數(shù) void ShowLine()東北大學軟件學院C+程序設計實驗報告東北大學軟件學院pt1.ShowPoint();cout-;pt2.ShowPoint(););int main()(CPoint cp1(2,4);CPoint cp2(3,6);CPoint cp;cout”兩個點分別是”;cp1.ShowPoint();
12、cp2.ShowPoint();cp=cp1+cp2;/兩個點相加 coutendl;cout”兩個點相加的結果是; cp.ShowPoint();cp=cp1-cp2;/兩個點相減 cout”兩個點相減的結果是; cp.ShowPoint();coutendl;CLine line1(1,3,5,0);CLine line2(cp1,cp2);cout線段 1 是;line1.ShowLine();coutendl;cout線段 2 是”;line2.ShowLine();coutendl長度為line1.Distance()endl;cout 直接創(chuàng)建一個點,請輸入兩個值: CPoint
13、LoadPoint;cinLoadPoint;coutLoadPoint;重載 直接輸出對象 return 0;)運行結果:東北大學軟件學院C+程序設計實驗報告東北大學軟件學院 F :1學習 C 十 +e比p e rient2expe 2D e bugexpe .exe|兩個點分別是4)6)兩個點相加的結果是10)兩個點相減的結果是2)線段1是口-0)線段2是4) -6)長度為5重載A直接創(chuàng)建一個點,請輸入兩個值士 4 8隹載直接輸出對象得到;(4, 8)Press any key to continue總結:通過C+重載運算符的操作,可以讓編程者自定義各個操作符的運算規(guī)則,簡化了程序 的編寫
14、邏輯和過程。實驗三項目一:內容:使用實驗2中的CPoint類,定義“空間中點”類如下:class CThreePoint:public CPoint(private:int z;public:CThreePoint();CThreePoint(int, int, int);int GetZ();void SetZ(int pz);virtual void ShowPoint(););完成該類中各成員函數(shù)的定義。并利用VC調試工具觀察含有繼承關系類的構造函數(shù)和 析構函數(shù)的執(zhí)行情況。代碼:#include#includeclass CPoint(private:int x,y;static int
15、 nCount ;/ nCount用于保存點的個數(shù)public:CPoint(int px=0,int py=0):x(px),y(py)(/構造函數(shù),這個地方一定要寫函數(shù)體內容,不然沒有初始化的話會導致運行出錯。東北大學軟件學院C+程序設計實驗報告東北大學軟件學院/CPoint(CPoint&);CPoint()/這是析構函數(shù)int GetX() constreturn x;int GetY() constreturn y;void SetX(int a)x=a;void SetY(int b)y=b;virtual void ShowPoint()/只有把它設置為虛函數(shù)時候才會出現(xiàn)(8,9
16、)(3,2,5)的輸出 結果。否則都是(8,9)(3,2)cout(x,y);class CThreePoint:public CPointprivate:int z;public:CThreePoint()無參構造CThreePoint(int px=0,int py=0,int pz=0)SetX(px);SetY(py);z=pz;int GetZ()return z;void SetZ(int pz)z=pz;virtual void ShowPoint()cout(GetX(),GetY(),zShowPoint();pt=&ctp;pt-ShowPoint();return 0;)
17、運行結果:J int itiainf jCPomt cp(S.9i :CThrssPoint ctpi;3.2.5);CPoint Kpt=Scp; pt-ShckiPoint (); pt=fictp: pt-ShcuPaintj ; return a:東北大學軟件學院 1 n東北大學軟件學院 1 n+experient3exp3Debugexp3.e(8,9) (3, 2, 5)Press any key to continue.C+中的繼承、虛函數(shù),多態(tài),數(shù)據(jù)的封裝,構造函數(shù)的實現(xiàn)等等各種面向對象程序設計的特性,方便進行現(xiàn)象化描述,通過對這一部分的學習,對于C+中的類的概念進一步鞏 固,
18、基于對JAVA的學習,現(xiàn)在對于C+中多態(tài)、繼承有了較多的了解。項目二:內容:定義一個車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù), 由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(bicycle)類有高度(Height)等屬性, 汽車(motorcar)類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle) 類,它們都有Run、Stop等成員函數(shù)。代碼:#include class vehicle(public:int MaxSpeed;int Weight;vi
19、rtual void Run()執(zhí)行該方法則開始運行cout開始運行,速度為MaxSpeedendl;)virtual void Stop()-10 -東北大學軟件學院C+程序設計實驗報告東北大學軟件學院(執(zhí)行則停止運行cout停止運行endl;);class bicycle:virtual public vehicle(public:int Height;);class motorcar:virtual public vehicle (public:int SeatNum;);class motorcycle:public bicycle,public motorcar(public:int
20、 style;);main()(vehicle v;v.MaxSpeed=10;bicycle b;b.MaxSpeed=5;motorcar mcar;mcar.MaxSpeed=20;motorcycle mb;mb.MaxSpeed=15;/如果不設置成為虛基類的話則該行代碼編譯不通過vehicle *pt=&v;coutRun();pt-Stop();pt=&b;coutRun();pt-Stop();pt=&mcar;coutRun();pt-Stop();pt=&mb;coutRun();pt-Stop();)/*vehicle開始運行,速度為10停止運行bicycle開始運行,速
21、度為5停止運行motorcar開始運行,速度為20- 11 -東北大學軟件學院C+程序設計實驗報告東北大學軟件學院停止運行motorcycle開始運行,速度為15 停止運行*/運行結果:ttinclude cLa&s uehicle public:int MaxSpeAd:int Ueight;, F:課堂罕習Ci, F:課堂罕習Ci十exp已伯it3WehiJRD已bugWhi(J巴眈巳*白hitrS開始運行白hitrS開始運行速度為I。停止運行uicy匕l(fā)i升始運行,速度為5停止運行_ _motcrcar開始運行,速度為20,止運行_ _motorcycl eM始運行,速度為15 停止運行
22、PupS3 any key to continueJvirtual uoid 5top口 “執(zhí)行則停止會cout 止.宮):class bicycle:uirtuel public;int Height:總結:學習了虛函數(shù)以及虛基類的使用以及作用。虛函數(shù)、虛基類的使用對于C+的多態(tài)繼承 有更大的便利性。實驗四項目一:內容:編寫一個函數(shù)模板,要求它返回兩個值中的最小者。但同時要確保正確處理字符串。 代碼:#include#includeusing namespace std;template T min(T a, T b)(T c;c = (ab) ? a : b;return c;)char
23、*min(char *a, char *b)(return strcmp(a, b)0 ? a : b;-12 -C+程序設計實驗報告東北大學軟件學院)void main()(cout 請輸入兩個整數(shù): t1 t2;cout ”最小的是: min(t1, t2) endl;system(pause);)運行結果:cout 1,請輸入。個整數(shù); t1 2 t2;cout ”最的是:cout 1,請輸入。個整數(shù); t1 2 t2;cout ”最的是: niinftl . t2 sy5temCpauej;請輸入兩個整數(shù):4 9最小的是:4請按任意鍵繼續(xù).void main()cout “建就A兩個整
24、比: endl :char tl 1013 . t21Q0; cin tl 12. minCtl. t2) endl;cout 最小的是: minCtl. t2) endl;pBuse): 4-+ex pe r i e n t4ex p 4D e buge情輸入兩個整數(shù): 卜K最小的是:K 情按任意鍵維續(xù).總結:C+中模板的一個作用就是對同一類型的函數(shù),進行不同參數(shù)類型的適配,比較人性化。 同時也方便了編程者進行對類庫的封裝,寫出一個框架來。項目二:內容:編寫一程序,讓用戶自由地從鍵盤上輸入整數(shù),直到輸入數(shù)字0時結束。把用戶輸入的 數(shù)據(jù)保存在模板類Vectorvint上義的對象中,并對用戶輸入
25、的所有數(shù)進行排序輸出。在向顯 示器進行輸出時,要求用一下3種方式實現(xiàn):a)僅使用Vectorvint乂T相關成員函數(shù),不使用迭代器進行輸出;b)使用迭代器自己編程輸出;c)使用STL提供的通用算法for_each進行輸出。代碼:#include #include #include using namespace std;-13 -東北大學軟件學院C+程序設計實驗報告東北大學軟件學院void show(int n);void main()(vector a;int n = 0;do(cin n;a.push_back(n); while (n != 0);for (int x = 0; (uns
26、igned int)xa.size(); x+)for (int y = x; (unsigned int)yay)(int z = ax;ax = ay;ay = z;for (int i = 0; (unsigned int)i = a.size() - 1; i+)cout ai ;cout endl;vector:iterator start = a.begin();vector:iterator end = a.end();while (start != end)(cout *start ;+start;cout endl;for_each(a.begin(), a.end(), s
27、how);cout endl;void show(int n)(cout n ayj)x: (unsigned卜學習 C -1- i-exper iient4exp4_VectorDebugext東北大學軟件學院C+程序設計實驗報告東北大學軟件學院326233262323573 35/499 b024623323573992350246233235739923502462332357399235Press any key to conf intleint 2 = as:ax = ay;fiy : h:Jfor Cint i = Q; (unsigned int cout ai ,;cout e
28、nd!;uector; iterator start = uector; iterator end = a Hhile Cstart != end) cout start : +start:cout end!:fora.beginf. a.endC J.cout end!:總結:C+中對于數(shù)據(jù)的存儲有較多種方式,這里實現(xiàn)一種存儲并排序輸出。掌握了 Vector 的使用及其技巧。.實驗總結從接觸的第一門面向對象的語言JAVA開始,就對這種以對象形式來編程的方式產生了 興趣?,F(xiàn)在,又學習了(3+,我對C+這種面向對象的編程語言的語法有了大致的掌握,由 于學過JAVA語言,所以面向對象的思想掌握的不
29、是很慢,但是比較吃力的就是C+中既融 合了C的指針思想,又具有JAVA的引用變量思想,還有就是析構函數(shù)的引入,編程人員自 己在內存中分配內存,而且用完之后要自己調用相應的函數(shù)去釋放,所以操作實現(xiàn)起來稍顯 困難,不過這也是C+不同于JAVA之處一一對機器配置要求不是太高。C+編程的一些基本方法,是融合了C語言以及JAVA的,學會YC+語言的基本語 法,面向對象類的設計思想,我也還學會了如何自己從網上尋找資源,如何自學新東西,相 信這次實驗學到的知識在我未來的學習個工作道路上都會是寶貴的財富,并且會在以后的編 程之路上給予我較大的幫助。.思考題實驗一:重載函數(shù)是通過什么來區(qū)分?答:參數(shù)類型、數(shù)量、
30、順序。C+提供的輸入輸出操作與C語言的輸入輸出操作的異同點?答:同:都可以通過輸入設備輸入并將數(shù)據(jù)顯示出來。異:C+不用指定輸出類型。-15 -C+程序設計實驗報告東北大學軟件學院C+都定義了那些流?他們分別與什么設備相連?答:C+定義了 io流,與輸入輸出設備相連。實驗二:類和結構體的區(qū)別是什么?答:成員訪問權限不同,繼承方式不同。結構體不提供繼承機制,類提供繼承機制,實 現(xiàn)代碼復用;類可以實現(xiàn)多態(tài),結構體不支持。結構體中的數(shù)據(jù)默認方式是public的,而類 是 private 的。類的成員函數(shù)與普通的函數(shù)有何區(qū)別?答:類的成員函數(shù)是成員的特有方法,而普通函數(shù)能夠隨意被調用。構造函數(shù)和析構函數(shù)的作用是什么?答:初始化對象,分配內存空間,釋放內存空間。類的訪問控制權限有何意義?答:保護成員變量,可以將類中的具體細節(jié)封裝起來。實驗三:C+中有哪幾種派生方式?每種方式的派生類對基類成員的繼承和訪問控制屬性 是什么樣的?答:有 public,private,protected派生。public派生,在派生類里和外面都可以直接調用基類的公有部分。protected保護派生,在派生類里可以直接調用,但是在派生外面不可以調用。private私有派生在派生類里和外面都不可以直接調用,但可以用函數(shù)間接調用。派生類對象和基類對象是什么樣的關系?派生類對象的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國血液灌流器行業(yè)需求狀況與應用前景預測報告
- 2025-2030中國航行數(shù)據(jù)記錄儀 (VDR)系統(tǒng)行業(yè)現(xiàn)狀趨勢與投資前景預測報告
- 2025-2030中國聚氨酯(PU)微球行業(yè)發(fā)展態(tài)勢及未來需求預測報告
- 廢物處理設施運行維護與管理考核試卷
- 遠程維修過程中的用戶隱私保護考核試卷
- 智慧培訓在可持續(xù)發(fā)展教育中的作用考核試卷
- 可再生能源項目生命周期評價體系建立考核試卷
- 人力資源管理者職業(yè)規(guī)劃全解
- 衛(wèi)星物聯(lián)網數(shù)據(jù)存證技術前沿探討
- 制造業(yè)2025年市場拓展策略與挑戰(zhàn)
- 青島版數(shù)學八年級下冊-《平方根》教學課件
- 校園文印店經營方案
- 2024屆重慶市沙坪壩區(qū)英語八年級第二學期期末監(jiān)測試題含答案
- 2023北京西城區(qū)高二下學期期末英語試題及答案
- 實現(xiàn)馬克思主義中國化時代化新的飛躍
- 2024網站滲透測試報告
- 夏令營教官管理手冊
- 眾包物流模式下的資源整合與分配
- 2024年司法考試真題及答案
- 四川省成都市成華區(qū)2023-2024學年七年級上學期期末數(shù)學試題(含答案)
- 慢性硬膜下血腫護理要點大揭秘
評論
0/150
提交評論