C++面向?qū)ο蟪绦蛟O(shè)計-實驗指導(dǎo)書_第1頁
C++面向?qū)ο蟪绦蛟O(shè)計-實驗指導(dǎo)書_第2頁
C++面向?qū)ο蟪绦蛟O(shè)計-實驗指導(dǎo)書_第3頁
C++面向?qū)ο蟪绦蛟O(shè)計-實驗指導(dǎo)書_第4頁
C++面向?qū)ο蟪绦蛟O(shè)計-實驗指導(dǎo)書_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)C+面向?qū)ο蟪绦蛟O(shè)計教程實 驗 指 導(dǎo) 書吳蕓、施華 編 寫適用專業(yè): 計算機類相關(guān)專業(yè) 廈門理工學(xué)院計算機科學(xué)與技術(shù)系(部)2013 年 02月前 言C+語言是在C語言基礎(chǔ)上擴充了面向?qū)ο髾C制而形成的一種面向?qū)ο蟮某绦蛟O(shè)計語言,它除了繼承C語言的全部優(yōu)點和功能外,還支持面向?qū)ο蟪绦蛟O(shè)計。本課程共分7個章節(jié)。第1章概述了面向?qū)ο蟪绦蛟O(shè)計的基本概念。第2章介紹了C+對C語言在非面向?qū)ο蠓矫娴臄U充。第3章至第7章詳述了C+支持面向?qū)ο蟪绦蛟O(shè)計的基本方法,包括類和對象、派生類

2、和繼承、多態(tài)性、模板、流類庫等。通過本課程的學(xué)習(xí),學(xué)生需要掌握這些基本知識。為了使學(xué)生更好地理解和深刻地把握這些知識,并在此基礎(chǔ)上,掌握C+程序設(shè)計的基本技能和面向?qū)ο蟮母拍钆c方法,并能編寫出具有良好風(fēng)格的程序,共設(shè)置了7個實驗項目,與課程的7個章節(jié)分別對應(yīng)。其中實驗5為綜合性、設(shè)計性實驗,其余為驗證性實驗。本指導(dǎo)書主要針對選用的教材C+面向?qū)ο蟪绦蛟O(shè)計(第3版),陳維興,林小茶 編著,清華大學(xué)出版社,2009.06,也可以作為其它C+教材的實驗指導(dǎo)書的參考。該指導(dǎo)書適應(yīng)于計算機相關(guān)專業(yè)。實驗緒:對C語言編程的簡單回顧實驗學(xué)時:2實驗類型:驗證實驗要求:選修一、實驗?zāi)康耐ㄟ^本實驗的學(xué)習(xí),使學(xué)生

3、熟悉Visual C+ 6.0集成開發(fā)環(huán)境的使用,通過C語言的回顧,了解C+對C語言語法的繼承與發(fā)展。掌握C基本數(shù)據(jù)類型的基本概念、基本屬性。學(xué)會如何書寫一個整型、字符型、實型常量。掌握C算術(shù)運算符的基本概念、基本屬性、運算規(guī)則。二、實驗內(nèi)容1輸入下列源程序,進(jìn)行修改、編譯、連接和運行。程序:main ( ) char c1,c2;c1=97;c2=98;printf(%c,%cn,c1,c2);printf(%d,%dn,c1,c2); 【運行結(jié)果是】: 【兩行結(jié)果的不同是由什么引起的】:2輸入下列源程序,進(jìn)行修改、編譯、連接和運行。分析+運算符。程序:main ( ) int i,j,m,

4、n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%d n,i,j,m,n); 【運行結(jié)果是】: 【分析前+和后+的不同】:3輸入下列源程序,進(jìn)行修改、編譯、連接和運行。分析+和-運算符。程序:main ( ) int i,j;i=8;j=10;printf(%d,%d n, i,j);printf(%d,%d n,i+,j-);printf(%d,%d n, i,j);printf(%d,%d n, + i,- j); 【運行結(jié)果是】:【分析運行結(jié)果】:4輸入并運行下面的程序:#includevoid main()char c1,c2,c3;c1=getchar();

5、c2=getchar();c3=getchar();putchar(c1);putchar(c2);putchar(c3);觀察以下不同輸入時的輸出,分析不同輸出的原因。( 表示回車)(1)123(2)12(3)1 2【運行結(jié)果是】:【分析運行結(jié)果】:5把以上程序改寫如下,用于上面相同的輸入運行,分析不同輸出的原因。#includevoid main()char c1,c2,c3;c1=getchar();putchar(c1);c2=getchar();putchar(c2);c3=getchar();putchar(c3);【運行結(jié)果是】:【分析運行結(jié)果】:6輸入并運行下面的程序,分析格式

6、控制對輸出的影響。#includevoid main()int a=-1,b=98;double x=152.;printf(a=%d,%ld,%u,%o,%xn,a,a,a,a,a);printf(b=%d,%5d,%-5d,%c,%5c,%-5cn,b,b,b,b,b,b);printf(x=%f,%en,x,x);printf(x=%.2f,%15.2f,%-15.2f,%15.9f,%2fn,x,x,x,x,x);【運行結(jié)果截圖】:【分析運行結(jié)果】:7輸入并運行下面的程序:#includevoid main()int a,b;double x;float y;scanf(%d,%d,&

7、a,&b);printf(a=%d,b=%dn,a,b);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b); 觀察以下不同輸入時的輸出,分析間隔符號對輸入的影響。( 表示回車)(1)1,2 1,2(2)1 2 1 2(3)1 1 2【運行結(jié)果截圖】:【分析運行結(jié)果】:8轉(zhuǎn)義字符的使用。main() int a,b,c; a=5; b=6; c=7; printf(“ ab ctderfn”);printf(“hijktLbMn”);【運行結(jié)果截圖】:9大小寫轉(zhuǎn)換main() char a,b; a=a; b=b; a=a-32; b=b-32; printf(%

8、c,%cn%d,%dn,a,b,a,b);【運行結(jié)果截圖】:10參考例題2-2完成題目:設(shè)圓半徑r=1.5 圓柱高h(yuǎn)=3求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積,輸出結(jié)果要有文字說明,如The area is 7.06. (其中=3.,采用第二章例題2-2的#define來定義;圓周長2r、圓面積r2、圓球表面積4r2、圓球體積4/3r3、圓柱體積r2h)【測試結(jié)果】:rhcircleareasurfaceglobecolumn1.533.452.56三、實驗原理、方法和手段總體思想:通過幾個簡單程序的設(shè)計,熟悉Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;通過對

9、C程序的回顧,了解C+對C程序語法的繼承與發(fā)展。四、實驗組織運行要求本實驗采用“以集中授課,學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。五、實驗條件微型計算機;windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;Microsoft Visual Studio 6.0集成開發(fā)環(huán)境的MSDN。六、實驗步驟1、進(jìn)入和退出Visual C+ 6.0集成開發(fā)環(huán)境。 啟動并進(jìn)入Visual C+ 6.0集成開發(fā)環(huán)境有三種方法:(1)在開始菜單上,選擇程序,然后Microsoft Visual Studio 6.0組,再選擇Microsoft Visual Studio

10、6.0。(2)在桌面上創(chuàng)建VC的某種工程的快捷方式,直接雙擊該圖標(biāo);(3)如果已經(jīng)創(chuàng)建了VC的某種工程,雙擊該工程的dsw(Develop Studio Workshop)文件圖標(biāo),也可以進(jìn)入集成開發(fā)環(huán)境,并打開該工程。(4)選擇FileExit菜單,退出集成開發(fā)環(huán)境。2、菜單、工具欄和集成開發(fā)環(huán)境的使用方法,在附錄的菜單介紹中有,可以查閱MSDN具體使用方法。3、參見C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)(陳維興 林小茶 編著,清華大學(xué)出版社,2009.06)的第10.1.2的實驗步驟。七、思考題1、思考問題:數(shù)據(jù)類型、運算符、表達(dá)式等在C語句中充當(dāng)什么成分?什么是標(biāo)識符?整型、實型、字符型常量

11、的書寫法是怎樣的?整型、實型、字符型變量怎樣創(chuàng)建?字符串怎樣表示?如何求表達(dá)式的值?混合表達(dá)式的求值規(guī)則是怎樣的?八、實驗報告1完成實驗指導(dǎo)書C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗1;2做好實驗記錄;3按照實驗報告格式(附件1)要求填寫實驗內(nèi)容,并提交實驗報告。九、其它說明每次實驗前,實驗指導(dǎo)書都會預(yù)先發(fā)放,請?zhí)崆邦A(yù)習(xí)實驗,特別是實驗涉及的原理。實驗要求及時完成并上交實驗報告,鼓勵提前完成必做實驗,并盡量多做實驗題目。遵守學(xué)生實驗室管理的相關(guān)規(guī)定及安全事項。實驗01:C+簡單程序設(shè)計實驗學(xué)時:6實驗類型:驗證實驗要求:必修一、實驗?zāi)康暮瘮?shù)是C+程序的基本組成模塊。通過本實驗

12、的學(xué)習(xí),使學(xué)生:1、進(jìn)一步熟悉Visual C+ 6.0的集成開發(fā)環(huán)境,為今后程序編程和調(diào)試奠定基礎(chǔ);2、了解C+在非面向?qū)ο蠓矫鎸功能的擴充與增強。二、實驗內(nèi)容1、輸入以下程序,進(jìn)行編譯,如果有錯誤、請修改程序,直到?jīng)]有錯誤,然后進(jìn)行鏈接和運行,并分析運行結(jié)果。#include using namespace std;int main() int a, b, c; cout a b; c = sum(a, b); cout sum is: c; return 0;sum(int a, int b) return a+b;【提示】本題重點在于實驗結(jié)果的分析?!具\行結(jié)果截圖】:【運行結(jié)果分析】

13、:程序在調(diào)用函數(shù)的時候,要先對函數(shù)進(jìn)行聲明,再進(jìn)行調(diào)用。本程序調(diào)用了一個sum函數(shù)用來計算兩個數(shù)的和。當(dāng)輸入5和6時,程序會自動得出答案為11,。2、編寫一個程序,用來分別求2個整數(shù)、3個整數(shù)、2個雙精度數(shù)和3個雙精度數(shù)的最大值?!疽蟆浚菏褂弥剌d函數(shù)來完成。采用C+輸入輸出流對象完成數(shù)據(jù)的輸出?!具\行結(jié)果截圖】:3、編寫一個程序,任意從鍵盤輸入兩個字符,能將它們按由大到小的順序輸出?!疽蟆浚撼绦蛑杏幸粋€交換兩個字符的函數(shù),其形參是變量的引用?!具\行結(jié)果截圖】:4、編寫一個程序,對一個整型數(shù)組的元素求和,結(jié)果使用全局變量sum存儲,另外對數(shù)組元素中的奇數(shù)求和,結(jié)果使用局部變量sum存儲,在主

14、程序?qū)蓚€結(jié)果輸出。【要求】:體會和理解作用域運算符的概念與使用方法?!具\行結(jié)果截圖】:5、編寫一個程序,聲明一個雙精度型指針變量,使用運算符new動態(tài)分配一個double型存儲區(qū),將首地址賦給該指針變量,并輸入一個數(shù)到該存儲區(qū)中。計算該數(shù)為半徑的圓的面積,并在屏幕上顯示,最后使用運算符delete釋放該空間。【要求】:體會和理解動態(tài)內(nèi)存分配的作用和意義?!具\行結(jié)果截圖】:6、編寫一個程序,完成二分法求解f(x)=0的根?!咎崾尽浚海?)請上網(wǎng)查找有關(guān)二分法用于查找“已排序數(shù)列”的代碼或程序,理解二分法的主要涉及思想,并運用于本題的設(shè)計與編碼。(2)為簡化問題,假設(shè) a*x*x + b*x +

15、c; a, b, c是輸入的任意實數(shù)。【要求】:采用C+編程風(fēng)格?!具\行結(jié)果截圖】:三、實驗原理、方法和手段1重載函數(shù):a) 函數(shù)名稱相同;b) 函數(shù)的形參個數(shù)不同;函數(shù)的形參類型不同;或兩者兼有;c) 函數(shù)的返回值不構(gòu)成判別標(biāo)準(zhǔn)。2了解“傳址調(diào)用”與“傳值調(diào)用”的區(qū)別;3“引用”不額外申請內(nèi)存。四、實驗組織運行要求本實驗采用“以集中授課,學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。五、實驗條件微型計算機;windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;Microsoft Visual Studio 6.0集成開發(fā)環(huán)境的MSDN。六、實驗步驟使用重載函數(shù)

16、求最大值:2個整數(shù):int max(int a, int b);3個整數(shù):int max(int a, int b, int c);2個雙精度數(shù):double max(double a, double b);3個雙精度數(shù):double max(double a, double b, double c);七、思考題 1、求組合數(shù)【提示】:求組合數(shù)要用到求階乘,將求階乘定義為一個函數(shù),在求組合數(shù)的函數(shù)中嵌套調(diào)用階乘函數(shù)。由于,求階乘是一個典型的遞歸算法,在此遞歸方法實現(xiàn)。includelong com(int, int), fac(int); /原型聲明void main() int m,n; c

17、out”Please input two numbers m, n(mmn;if(m=n) cout”C(m,n)=”com(m,n)endl;else cout”Input Errorn”;return;long com(int i, int j) long cmb; /att: A cmb=fac(j)/fac(i)*fac(j-i); /在com函數(shù)內(nèi)嵌套調(diào)用fac函數(shù) return cmb; long fac(int i) long fcl; if(i=0|i=1) fcl=1; else fac=i*fac(i-1); return fcl;* 這里因階乘極易溢出,請考慮修改??捎茫?/p>

18、。2、編寫幾個計算面積的函數(shù),分別計算圓、矩形、梯形和三角形的面積,計算邊長為1的正方形及其內(nèi)切圓、內(nèi)接等腰三角形和等腰梯形面積。【要求】:采用重載函數(shù)實現(xiàn)?!咎崾尽浚汉瘮?shù)原型如下: double area(double radius=0); / 圓面積,參數(shù)為半徑,缺省參數(shù)0,表示點面積double area(double a, double b);/ 計算矩形面積,參數(shù)為長和寬double area(double a, double b, double h);/ 計算梯形面積,參數(shù)為兩底和高double area(double a, double b, double c, int);/ 三

19、角形,參數(shù)為三邊長,int型參數(shù)起表示作用,以區(qū)別于梯形,不參加計算。3、建立一個頭文件area.h,在其中定義兩個面積函數(shù)area(),分別用來計算半徑為r的圓的面積和邊長為a和b的矩形面積。另外建立一個實現(xiàn)文件area.cpp,在其中定義主函數(shù)。通過包含area.h,輸入數(shù)據(jù)并輸出圓和矩形的面積。八、實驗報告1復(fù)習(xí)教材C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)(陳維興 林小茶 編著,清華大學(xué)出版社,2009.06)2完成實驗指導(dǎo)書C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗2;3做好實驗記錄;4按照實驗報告格式(附件1)要求填寫實驗內(nèi)容,并提交實驗報告。九、其它說明每次實驗前,實驗指

20、導(dǎo)書都會預(yù)先發(fā)放,請?zhí)崆邦A(yù)習(xí)實驗,特別是實驗涉及的原理。實驗要求及時完成并上交實驗報告,鼓勵提前完成必做實驗,并盡量多做實驗題目。遵守學(xué)生實驗室管理的相關(guān)規(guī)定及安全事項。實驗02:類與對象實驗學(xué)時:6+(6)實驗類型:驗證實驗要求:必修一、實驗?zāi)康念愂荂+擴展數(shù)據(jù)類型,可以封裝不同類型的數(shù)據(jù)成員和函數(shù)成員,類是面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)。本次實驗內(nèi)容包括面向?qū)ο蟮幕靖拍?、?gòu)造函數(shù)與析構(gòu)函數(shù),從實際問題抽象出類等,通過實驗要求:1、理解類和對象的概念;2、了解C+在非面向?qū)ο蠓矫鎸功能的擴充與增強。3、初步掌握使用類和對象編制C+程序。4、掌握對象數(shù)組、對象指針和string類的使用方法。5、掌

21、握使用對象、對象指針和對象引用作為函數(shù)參數(shù)的方法。6、掌握類對象作為成員的使用方法。7、掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法。8、理解友元的概念和掌握友元的使用方法。二、實驗內(nèi)容1、輸入下列程序。#includeusing namespace std;class Coordinatepublic: Coordinate(int x1,int y1) x=x1; y=y1; Coordinate(Coordinate &p);Coordinate() coutDestructor is calledn;int getx() return x;int gety() return y;priva

22、te:int x,y;Coordinate:Coordinate(Coordinate &p)x=p.x;y=p.y;coutCopy-initialization Constructour is calledn;int main() Coordinate p1(3,4); Coordinate p2(p1); Coordinate p3=p2; coutp3=(p3.getx(),p3.gety()n; return 0;【運行結(jié)果截圖】:將Coordinator類中帶有兩個參數(shù)的構(gòu)造函數(shù)進(jìn)行修改,在函數(shù)體內(nèi)增添下列語句: cout”constructor is called.n”;【運行結(jié)

23、果截圖】:【運行結(jié)果分析】:按下列要求進(jìn)行調(diào)試:在主函數(shù)體內(nèi),添加下列語句:Coordinator p4;Coordinator p5(2);調(diào)試程序時會出現(xiàn)什么錯誤?為什么?如何對已有的構(gòu)造函數(shù)進(jìn)行適當(dāng)修改?【運行結(jié)果截圖】:【解釋】: 經(jīng)過以上第(2)步和第(3)步的修改后,結(jié)合運行結(jié)果分析:創(chuàng)建不同的對象時會調(diào)用不同的構(gòu)造函數(shù)?!具\行結(jié)果分析】:p1是調(diào)用有兩個參數(shù)的構(gòu)造函數(shù),p2和p3都是p1的拷貝,但他們調(diào)用的是使用對象引用作為函數(shù)參數(shù)的構(gòu)造函數(shù),p4和p5都是調(diào)用兩個參數(shù)的構(gòu)造函數(shù),p4由于沒有給出實參,所以使用默認(rèn)參數(shù)。2、設(shè)計一個4*4魔方程序,讓魔方的各行值的和等于各列值的和

24、,并且等于兩對角線的和,例如以下魔方,各行各列及兩對角線值的和都是64.31 3 5 259 21 19 1517 13 11 237 27 29 1【提示】:求4*4的魔方的一般步驟如下:設(shè)置初始魔方的起始值和相鄰元素之間的差值。例如上述魔方的初始魔方的起始值(first)和相鄰元素之間的差值(step)分別為:first=1; step=2;設(shè)置初始魔方元素的值,例如上述魔方的初始魔方為:1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31生成最終魔方。方法如下:求最大元素值與最小元素值的和sum,該實例的sum是:1+31=32用32減去初始魔方所有對角線

25、上元素的值,然后將結(jié)果放在原來的位置,這樣就可以求得最終魔方。本題的魔法類magic的參考框架如下:class magicpublic: void getdata(); void getfirstmagic(); void generatemagic(); void printmagic();private:int m44;int step;int first;int sum;【運行結(jié)果截圖】:3、設(shè)計一個用來表示直角坐標(biāo)系的Location類,在主程序中創(chuàng)建類Location的兩個對象A和B,要求A的坐標(biāo)點在第3象限,B的坐標(biāo)點在第2象限,分別采用成員函數(shù)和友元函數(shù)計算給定兩個坐標(biāo)點之間的距

26、離,要求按如下格式輸出結(jié)果:A(x1,y1), B(x2,y2),Distance1=d1Distance2=d2其中:x1、y1、x2、y2為指定坐標(biāo)值,d1和d2為兩個坐標(biāo)點之間的距離?!咎崾尽浚侯怢ocation的參考框架如下:class Locationpublic:Location(double,double);/構(gòu)造函數(shù)double getx();/成員函數(shù),取x坐標(biāo)值double gety();/成員函數(shù),取y坐標(biāo)值double distance(Location &);/成員函數(shù),求給定兩點之間的距離friend double distance(Location &,Locat

27、ion &);/友元函數(shù),求給定兩點之間的距離private:double x,y;【運行結(jié)果截圖】:4、聲明一個Student類,在該類中包括一個數(shù)據(jù)成員score(分?jǐn)?shù))、兩個靜態(tài)數(shù)據(jù)成員total_score(總分)和count(學(xué)生人數(shù));還包括一個成員函數(shù)account()用于設(shè)置分?jǐn)?shù)、累計學(xué)生的成績之和、累計學(xué)生人數(shù),一個靜態(tài)成員函數(shù)sum()用于返回學(xué)生的成績之和,另一個靜態(tài)成員函數(shù)average()用于求全部成績的平均值。在main函數(shù)中,輸入某班同學(xué)的成績,并調(diào)用上述函數(shù)求出全班同學(xué)的成績之和和平均分。【Student類的框架】:【運行結(jié)果截圖】:5、使用C+的string類

28、,將5個字符串按逆轉(zhuǎn)后的順序顯示出來。例如,逆轉(zhuǎn)前5個字符的字符串是: Germany Japan America Britain France按逆轉(zhuǎn)后的順序輸出字符串是:France Britain America Japan Germany【運行結(jié)果截圖】:6、定義一個圓類(Circle),屬性為半徑(radius)和圓周長、面積,操作為輸入半徑并計算周長、面積,輸出半徑、周長和面積。要求定義構(gòu)造函數(shù)(以半徑為參數(shù),缺省值為0,周長和面積在構(gòu)造函數(shù)中生成)和復(fù)制構(gòu)造函數(shù)?!具\行結(jié)果截圖】:7、教材P134 習(xí)題3.33和3.34【運行結(jié)果截圖】:三、實驗原理、方法和手段設(shè)計思想:類和對象是

29、面向?qū)ο蟪绦蛟O(shè)計的第一重要概念。因此,首先要掌握類和對象的定義格式;理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用和系統(tǒng)調(diào)用機制;掌握友元函數(shù)、普通成員函數(shù)和普通函數(shù)之間的區(qū)別。四、實驗組織運行要求本實驗采用“以集中授課,學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。五、實驗條件微型計算機;windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;Microsoft Visual Studio 6.0集成開發(fā)環(huán)境的MSDN。六、實驗步驟參見C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗3的實驗步驟。七、思考題1、基礎(chǔ)題:(1)改善復(fù)數(shù)類,增加重載的運算符:-、-=、*=和

30、/=,實現(xiàn)完整的復(fù)數(shù)的加減乘除運算,定義+為輻角不變而模加1,重載前后+(+對普通的復(fù)數(shù)表達(dá)方式a+ib 為:a+a/sqrt(a*a+b*b),b+b/sqrt(a*a+b*b))。并定義main 函數(shù)檢測之。要求分別重載為成員函數(shù)和友元函數(shù)。(2)在主調(diào)函數(shù)中,能否用:“對象名.私有成員名”這樣的方式來訪問對象的私有成員?為什么?在類的成員函數(shù)中可以嗎?(3)在類的定義中是否須有構(gòu)造函數(shù)?構(gòu)造函數(shù)可以重載嗎?(4)構(gòu)造函數(shù)與析構(gòu)函數(shù)是否需要一一對應(yīng)?(5)拷貝函數(shù)與應(yīng)用場合是什么?(6)在靜態(tài)成員函數(shù)中是否可以直接引用靜態(tài)變量?可以直接引用非靜態(tài)變量嗎?(7)在靜態(tài)成員函數(shù)中,引用非靜態(tài)成

31、員時需要通過對象嗎?通過成員限定可以嗎?(8)在構(gòu)造函數(shù)中是否可以對類中靜態(tài)的數(shù)據(jù)成員進(jìn)行初始化?初始化的靜態(tài)數(shù)據(jù)成員是否可以將該值保持到下一次被改變?yōu)橹梗?、 編寫一個函數(shù),其原型為:void Index(int a, int n, int & sub),其功能是,在大小為n的數(shù)組a中,查找某個數(shù)sub,若找到,將其下標(biāo)存放在sub中,若沒有找到,將-1存放在sub中,在主調(diào)函數(shù)中通過判斷值來判斷數(shù)組中是否有該數(shù)?!咎崾尽浚涸谶@里,sub 是引用類型的參數(shù),但起返回值的作用。3、一個聲明為返回引用的函數(shù),還可以用在賦值號的左邊,即這種函數(shù)調(diào)用本身也是一個左值。#include int arr

32、ay = 2, 4, 6, 8, 10;int& index(int i);void main() index(3) = 16;for(int i=0;i5;i+) cout index(i) ;return;int& index(int i) return arrayi;【注意】由于函數(shù)index()是返回引用的類型,所以該函數(shù)調(diào)用可以作為一個左值,程序的表達(dá)式index(3)=16 將16 賦給左邊的函數(shù)調(diào)用,由于該函數(shù)調(diào)用返回對 array3 的引用,所以可以將array3賦新值。該程序運行的結(jié)果將使得整型數(shù)組array 中的各元素值變?yōu)椋?,4,6,16,10?!疽蟆啃薷某绦?qū)崿F(xiàn)數(shù)組

33、中數(shù)據(jù)的反轉(zhuǎn),成為:10,8,6,4,2。八、實驗報告1復(fù)習(xí)教材C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)(陳維興 林小茶 編著,清華大學(xué)出版社,2009.06)2完成實驗指導(dǎo)書C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗3;3做好實驗記錄;4按照實驗報告格式(附件1)要求填寫實驗內(nèi)容,并提交實驗報告。九、其它說明每次實驗前,實驗指導(dǎo)書都會預(yù)先發(fā)放,請?zhí)崆邦A(yù)習(xí)實驗,特別是實驗涉及的原理。實驗要求及時完成并上交實驗報告,鼓勵提前完成必做實驗,并盡量多做實驗題目。遵守學(xué)生實驗室管理的相關(guān)規(guī)定及安全事項。實驗03:派生類和繼承實驗學(xué)時:6+(6)實驗類型:驗證實驗要求:必修一、實驗?zāi)康?、掌握

34、派生類的聲明方法和派生類構(gòu)造函數(shù)的定義方法;2、掌握不同繼承方式下,基類成員在派生類中的訪問屬性;3、掌握在繼承方式下,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造規(guī)則;4、學(xué)習(xí)虛函數(shù)在解決二義性問題中的作用。二、實驗內(nèi)容1、輸入下列程序。#includeusing namespace std;class Basepublic:void setx(int i) x=i; int getx() return x;public:int x;class Derived:public Basepublic:void sety(int i)y=i;int gety() return y;void show()co

35、utBase:x=xendl;/語句1public:int y;int main()Derived bb;/語句2 bb.setx(16);/語句3bb.sety(25);/語句4bb.show();/語句5coutBase:x=bb.xendl;/語句6coutDerived:y=bb.yendl;/語句7coutBase:x=bb.getx()endl;/語句8coutDerived:y=bb.gety()endl;/語句9return 0;【運行結(jié)果截圖】:按以下要求,對程序進(jìn)行修改后再調(diào)試,指出調(diào)試中出錯的原因。將基類Base中的數(shù)據(jù)成員x的訪問權(quán)限改為private時,會出現(xiàn)哪些錯誤

36、,為什么?【運行結(jié)果分析】:x將不允許派生類繼承,即在派生類中是不可直接訪問的。將基類Base中的數(shù)據(jù)成員x的訪問權(quán)限改為protected時,會出現(xiàn)哪些錯誤,為什么?【運行結(jié)果分析】:基類Base中的所有公有成員在派生類中都以保護(hù)成員的身份出現(xiàn)。在原程序的基礎(chǔ)上,將派生類Derived的繼承方式改為private時,會出現(xiàn)哪些錯誤?為什么?【運行結(jié)果分析】:公有繼承時不能訪問基類的私有成員的內(nèi)部和對象,不能訪問基類的保護(hù)成員的對象。在原程序的基礎(chǔ)上,將派生類Derived的繼承方式改為protected時,會出現(xiàn)哪些錯誤?為什么?【運行結(jié)果分析】:保護(hù)繼承時不能訪問基類的私有成員的內(nèi)部和對象

37、,不能訪問基類公有成員和保護(hù)成員的對象。2、編寫一個學(xué)生和教師的數(shù)據(jù)輸入和顯示程序。學(xué)生數(shù)據(jù)有編號、姓名、性別、年齡、系別和成績,教師數(shù)據(jù)有編號、姓名、性別、年齡、職稱和部門。要求將編號、姓名、性別、年齡的輸入和顯示設(shè)計成一個類Persona,并作為學(xué)生類Student和教師類Teacher的基類。【person類結(jié)構(gòu)】:class Persona public: Persona(int numberl,string namel,string sexl,int agel) number=numberl; name=namel; sex=sexl; age=agel; void print()

38、coutnumber:numberendl; coutname:nameendl; coutsex:sexendl; coutage:ageendl; protected: int number;string name; string sex; int age; ;【Student類結(jié)構(gòu)】:class Student:private Persona public: Student(int numberl,string namel,string sexl,int agel,string gradel,float scorel) :Persona(numberl,namel,sexl,agel)

39、grade=gradel; score=scorel; void print() Persona:print(); coutgrade:gradeendl; coutscore:scoreendl; private: string grade; float score; ;【Teacher類結(jié)構(gòu)】:class Teacher:private Persona public: Teacher(int numberl,string namel,string sexl,int agel,string positionl,string departmentl) :Persona(numberl,name

40、l,sexl,agel) position=positionl; department=departmentl; void print() Persona:print(); coutposition:positionendl; coutdepartment:departmentendl; private: string position; string department; ;【運行結(jié)果截圖】:3、按要求閱讀、編輯、編譯、調(diào)試和運行以下程序。(1)閱讀、編輯、編譯、調(diào)試和運行以下程序,并寫出程序運行結(jié)果。#include#includeusing namespace std;class My

41、Arraypublic:MyArray(int leng);MyArray();void Input();void Display(string);protected:int *alist;int length;MyArray:MyArray(int leng) if(leng=0)couterror length; exit(1); alist=new int leng; length=leng; if(alist=NULL)coutassign failure;exit(1);coutMyArray 類對象已創(chuàng)建。endl;MyArray:MyArray()delete alist;cou

42、tMyArray 類對象被撤銷。endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength個整數(shù):;for(i=0;ilength;i+,p+)cout*p ;coutendl;void MyArray:Input()cout請從鍵盤輸入length個整數(shù):;int i;int *p=alist;for(i=0;i*p;int main()MyArray a(5);a.Input();a.Display(顯示已輸入的);return 0;(2)聲明一個類SortArray繼承類MyArray,在該類中定義一個函數(shù),

43、具有將輸入的整數(shù)從小到大進(jìn)行排序的功能?!咎崾尽浚赫堊⒁饩帉懤^承類的構(gòu)造函數(shù)、析構(gòu)函數(shù),以及修改主函數(shù)。【SortArray類框架】:class SortArray:public MyArray public: void Sort(); SortArray(int leng):MyArray(leng) coutSoryArray 類對象已創(chuàng)建。endl; virtualSortArray(); ; SortArray:SortArray() coutSortArray 類對象被撤銷。endl; 【運行結(jié)果截圖】:(3)聲明一個類ReArray繼承類MyArray,在該類中定義一個函數(shù),即有將

44、輸入的整數(shù)進(jìn)行倒置的功能。【提示】:請注意編寫繼承類的構(gòu)造函數(shù)、析構(gòu)函數(shù),以及修改主函數(shù)?!綬eArray類框架】:class ReArray:public MyArray public: void reverse(); ReArray() coutReArray類對象被撤銷。endl; ; ReArray(int leng):MyArray(leng) coutReArray類對象已創(chuàng)建。endl; 【運行結(jié)果截圖】:(4)聲明一個類Average繼承類MyArray,在該類中定義一個函數(shù),即有將輸入的整數(shù)進(jìn)行倒置的功能。【提示】:請注意編寫基繼承類的構(gòu)造函數(shù)、析構(gòu)函數(shù),以及修改主函數(shù)。【A

45、verage類框架】:class AverArray:public MyArray public: AverArray(int leng): MyArray(leng) coutMyArray類對象已創(chuàng)建。endl; AverArray() coutAverArray類對象被撤銷。endl; double Aver(); ; double AverArray: Aver() double sum=0,average; int i; for( i=0;ilength;i+) sum+=alisti; average=sum/length; cout平均數(shù)是:averageendl; return

46、 0; 【運行結(jié)果截圖】:(5)聲明一個NewArray類,同時繼承了類SortArray,ReArray和Average,使得類NewArray的對象同時具有排序、倒置和求平均值的功能。在繼承的過程中聲明MyArray為虛基類,體會虛基類在解決二義性問題中的作用。【NewArray類框架】:class NewArray:public SortArray ,public ReArray,public AverArray ,virtual public MyArray public: NewArray(int leng):SortArray(leng),ReArray(leng),AverArr

47、ay(leng),MyArray(leng) coutNewArray類對象已創(chuàng)建。endl; NewArray() coutNewArray類對象被撤銷。endl;【運行結(jié)果截圖】:三、實驗原理、方法和手段1派生類的定義:class 派生類名:訪問限定符 基類名1,訪問限定符 基類名2,訪問限定符 基類名n private: 成員表1; /派生類增加或替代的私有成員public:成員表2; /派生類增加或替代的公有成員protected:成員表3; /派生類增加或替代的保護(hù)成員;/分號不可少2虛函數(shù)的定義虛函數(shù)是一個類的成員函數(shù),定義格式如下:virtual 返回類型 函數(shù)名(參數(shù)表);關(guān)鍵

48、字virtual指明該成員函數(shù)為虛函數(shù)。virtual僅用于類定義中,如虛函數(shù)在類外定義,不可再加virtual。四、實驗組織運行要求本實驗采用“以集中上機,學(xué)生自主訓(xùn)練,教師指導(dǎo)答疑“的方式進(jìn)行。五、實驗條件微型計算機;windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;Microsoft Visual Studio 6.0集成開發(fā)環(huán)境的MSDN。六、實驗步驟1派生的四個步驟:編制派生類時可分四步 吸收基類的成員 改造基類成員 發(fā)展新成員 重寫構(gòu)造函數(shù)與析構(gòu)函數(shù) 不論是數(shù)據(jù)成員,還是函數(shù)成員,除構(gòu)造函數(shù)與析構(gòu)函數(shù)外全盤接收 聲明一個和某基類成員同名的

49、新成員,派生類中的新成員就屏蔽了基類同名成員稱為同名覆蓋(override) 派生類新成員必須與基類成員不同名,它的加入保證派生類在功能上有所發(fā)展。 2派生類的定義class 派生類名:訪問限定符 基類名1,訪問限定符 基類名2,訪問限定符 基類名n private: 成員表1; /派生類增加或替代的私有成員public:成員表2; /派生類增加或替代的公有成員protected:成員表3; /派生類增加或替代的保護(hù)成員;/分號不可少派生類構(gòu)造函數(shù)的定義:派生類名:派生類名(參數(shù)總表):基類名1(參數(shù)名表1),基類名2(參數(shù)名表2),基類名n(參數(shù)名表n),成員對象名1(成員對象參數(shù)名表1),

50、成員對象名m(成員對象參數(shù)名表m)/派生類新增成員的初始化; /所列出的成員對象名全部為新增成員對象的名字七、思考題1. 試比較派生與模板的優(yōu)點。八、實驗報告1復(fù)習(xí)教材C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)(陳維興 林小茶 編著,清華大學(xué)出版社,2009.06)2完成實驗指導(dǎo)書C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗4;3 做好實驗記錄;4 按照實驗報告格式(附件1)要求填寫實驗內(nèi)容,并提交實驗報告。九、其它說明每次實驗前,實驗指導(dǎo)書都會預(yù)先發(fā)放,請?zhí)崆邦A(yù)習(xí)實驗,特別是實驗涉及的原理。實驗要求及時完成并上交實驗報告,鼓勵提前完成必做實驗,并盡量多做實驗題目。遵守學(xué)生實驗室管理的相

51、關(guān)規(guī)定及安全事項。實驗04:多態(tài)性實驗學(xué)時:6實驗類型:驗證實驗要求:必修一、實驗?zāi)康?、了解多態(tài)性的概念;2、掌握運算符重載的基本方法;3、掌握虛函數(shù)的定義和使用方法;4、掌握純虛函數(shù)和抽象類的概念和用法二、實驗內(nèi)容1、分析并調(diào)試下列程序,寫出程序的輸出結(jié)果,并解釋輸出結(jié)果。#include using namespace std;class Bpublic:virtual void f1(double x) coutB:f1(double) xendl;void f2(double x) coutB:f2(double) 2*xendl;void f3(double x) coutB:f3

52、(double) 3*xendl;class D:public Bpublic:virtual void f1(double x) coutD:f1(double) xendl; void f2(int x) coutD:f1(int) 2*xendl;void f3(double x) coutD:f3(double) xf1(1.23);pd-f1(1.23);pb-f2(1.23);pb-f3(1.23);pd-f3(3.14);return 0;【運行結(jié)果截圖】:【運行結(jié)果分析】:函數(shù)f1()被定義為虛函數(shù),所以執(zhí)行pb-f1(1.23)語句時,程序根據(jù)指針pb所指向的的實際對象,調(diào)用

53、該對象的成員函數(shù)。而f2() 和f3()只是普通的成員函數(shù),不管pb指向哪個對象,程序pb-f2(1.23)和pb-f3(1.23)調(diào)用的都是基類中定義的的函數(shù)。2、編寫一個程序,其中設(shè)計一個時間類Time,用來保存時、分、秒等私有數(shù)據(jù)成員,通過重載操作符“+”實現(xiàn)兩個時間的相加?!疽蟆浚簩⑿r范圍限制在大于等于0,分鐘范圍限制在059分,秒鐘范圍限制在059秒?!咎崾尽浚簳r間類Time的參考框架如下:class Timepublic:Time(int h=0,int m=0,int s=0);Time operator +(Time &);void disptime(string);pri

54、vate:int hourse;int minuters;int seconds;【運行結(jié)果截圖】:3、給出下面的抽象基類container。class containerprotected:double radius;public:container(double radius);virtual double surface_area()=0;virtual double volume()=0;建立3個繼承container的派生類cube、sphere與cylinder,讓每一個派生類都包含虛函數(shù)surface_area()和volume(),分別用來計算正方體、球體和圓柱體的表面積及體積

55、?!疽蟆浚簩懗鲋鞒绦?,用于C+的多態(tài)性,分別計算邊長為6.0的正方體、半徑為5.0的球體,以及半徑為5.0和高為6.0的圓柱體的表面積和體積。【運行結(jié)果截圖】:4、編寫程序,用于進(jìn)行集合的并、差和交運算。例如輸入整數(shù)集合9 5 4 3 6 7和2 4 6 9,計算出它們進(jìn)行集合的并、差和交運算后的結(jié)果。1)可以用以下表達(dá)式實現(xiàn)整數(shù)集合的運算: s1+s2 兩個整數(shù)集合的并運算s1-s2 兩個整數(shù)集合的差運算s1*s2 兩個整數(shù)集合的交運算【Set類的框架】:#include stdafx.h/15計算機2班03-陳銘燕-實驗04-C+簡單程序設(shè)計#include using namespac

56、e std; const int MAX=100; class Set public: void input(int); int length(); void disp(); Set operator+(Set s1); Set operator-(Set s1); Set operator*(Set s1); private: int len; int sMAX; int mMAX; ; void Set:input(int d) int i; len=d; cout輸入集合元素d個: ; for(i=0;isi; si=0; int Set:length() int i=0; while(

57、mi!=0) i+; return i; void Set:disp() int i; int k=length(); for(i=0;ik;i+) coutmi ; coutendl; Set Set:operator +(Set s1) int i,j;int t=s1.len; int k=len; for(i=0;ilen;i+) mi=si; for(i=0;is1.len;i+) s1.mi=s1.si; for(i=0;ik;i+) for(j=0;jt;j+) if(mi=s1.mj) for(;jt;j+) s1.mj=s1.mj+1; t-; for(j=0;jt;j+)

58、mk=s1.mj; k+; mk=0; return *this; Set Set:operator -(Set s1) int i,j; int k=len;int t=s1.len; for(i=0;ilen;i+) mi=si; for(i=0;is1.len;i+) s1.mi=s1.si; for(i=0;it;i+) for(j=0;jk;j+) if(s1.mi=mj) for(;jk;j+) mj=mj+1;k-; mk=0; return *this; Set Set:operator *(Set s1) int i,j; int aMAX,k=0; for(i=0;ilen

59、;i+) mi=si; for(i=0;is1.len;i+) s1.mi=s1.si; for(i=0;ilen;i+) for(j=0;js1.len;j+) if(mi=s1.mj) ak=mi;k+; for(i=0;ik;i+) mi=ai; mk=0; return *this; int main() int n; Set A,B,C; coutn; A.input(n); coutn; B.input(n); C=A+B; coutA+B為: ; C.disp(); C=A-B;coutA-B為: ; C.disp(); C=A*B; coutA*B為: ; C.disp();

60、return 0; 【運行結(jié)果截圖】:三、實驗原理、方法和手段1虛函數(shù)的定義:virtual 返回類型 函數(shù)名(參數(shù)表);關(guān)鍵字virtual指明該成員函數(shù)為虛函數(shù)。virtual僅用于類定義中,如虛函數(shù)在類外定義,不可再加virtual。四、實驗組織運行要求本實驗采用“以集中上機,學(xué)生自主訓(xùn)練,教師指導(dǎo)答疑“的方式進(jìn)行。五、實驗條件微型計算機;windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境;Microsoft Visual Studio 6.0集成開發(fā)環(huán)境的MSDN。六、實驗步驟參見C+面向?qū)ο蟪绦蛟O(shè)計教程(第3版)習(xí)題解答與上機指導(dǎo)的實驗5的實

溫馨提示

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

最新文檔

評論

0/150

提交評論