《面向?qū)ο蟪绦蛟O(shè)計(jì)》(C++)實(shí)驗(yàn)指導(dǎo)書_第1頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》(C++)實(shí)驗(yàn)指導(dǎo)書_第2頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》(C++)實(shí)驗(yàn)指導(dǎo)書_第3頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》(C++)實(shí)驗(yàn)指導(dǎo)書_第4頁(yè)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》(C++)實(shí)驗(yàn)指導(dǎo)書_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn) 1 類和對(duì)象1.1實(shí)驗(yàn)?zāi)康暮鸵?1) 理解類和對(duì)象的概念,掌握聲明類和定義對(duì)象的方法。(2) 掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的實(shí)現(xiàn)方法。(3) 初步掌握使用類和對(duì)象編制C+程序。(4) 掌握對(duì)象數(shù)組、對(duì)象指針和string類的使用方法。(5) 掌握使用對(duì)象、對(duì)象指針和對(duì)象引用作為函數(shù)參數(shù)的方法。(6) 掌握類對(duì)象作為成員的使用方法。(7) 掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法。(8) 理解友元的概念和掌握友元的使用方法。1.2實(shí)驗(yàn)內(nèi)容和步驟1. 輸入下列程序/test4-1.cpp#includeusing namespace std;class Coordinate public: Co

2、ordinate(int x1,int y1) x=x1; y=y1;Coordinate(Coordinate &p);Coordinate() cout”Destructor is callededn”; int getx() return x; int gety() return y;private: int x,y;Coordinate:Coordinate(Coordinate &p) x=p.x; y=p.y; cout”copy-initialization Constructou is calledn”;int main() Coordinate p1(3,4); Coordi

3、nate p2(p1); Coordinate p3=p2; cout”p3=(“p3.getx()”,”p3.gety()”)n”; return(0);(1) 寫出程序的運(yùn)行結(jié)果。(2) 將Coordinate類中帶有兩個(gè)參數(shù)的構(gòu)造函數(shù)進(jìn)行修改,在函數(shù)體內(nèi)增添下述語(yǔ)句:cout”Constructor is called.n”;寫出程序的運(yùn)行結(jié)果,并解釋輸出結(jié)果。(3)按下列要求進(jìn)行調(diào)試: 在主函數(shù)體內(nèi),添加下列語(yǔ)句:Coordinate p4;Coordinata p5(2);調(diào)試程序時(shí)會(huì)出現(xiàn)什么錯(cuò)誤?為什么?如何對(duì)已有的構(gòu)造函數(shù)進(jìn)行適當(dāng)修改?(4)經(jīng)過(guò)以上第(2)步和第(3)步的修改后

4、,結(jié)合運(yùn)行結(jié)果分析:創(chuàng)建不同的對(duì)象時(shí)會(huì)調(diào)用不同的構(gòu)造函數(shù)。2.設(shè)計(jì)一個(gè)4*4魔方程序,讓魔方的各行值的和等于各列值的和,并且等于兩對(duì)角線值的和。例如一下魔方:31 3 5 259 21 19 1517 13 11 237 27 29 1各行、各列以及對(duì)角線值的和都是64.【提示】 求4*4魔方的一般步驟如下:(1)設(shè)置初始魔方的起始值和相鄰元素之間的差值。例如上述魔方的初始魔方的起始值(first)和相鄰元素之間的差值(step)分別為: first=1 step=2 (2)設(shè)置初始魔方元素的值。例如上述魔方的初始魔方為: 1 3 5 7 9 11 13 15 17 19 21 23 25 2

5、7 29 31(3)生成最終魔方。方法如下: 求最大元素值與最小元素值的和sum,該實(shí)例的sum是: 1+31=32 用32減去初始魔方所有對(duì)角線上元素的值,然后將結(jié)果放在原來(lái)的位置,這樣就可求得最終魔方。本例最終魔方如下: 31 3 5 25 9 21 19 15 17 13 11 23 7 27 29 1本題的魔方類magic的參考框架如下: class magic public: void getdata(); void setfirstmagic(); void generatemagic(); void printmagic();private: int m44; int step;

6、 int first; int sum;3.設(shè)計(jì)一個(gè)用來(lái)表示直角坐標(biāo)系的Location類,在主程序中創(chuàng)建類Location的兩個(gè)對(duì)象A和B,要求A的坐標(biāo)點(diǎn)在第3象限,B的坐標(biāo)在第2象限,分別采用成員函數(shù)和友元函數(shù)計(jì)算給定兩個(gè)坐標(biāo)點(diǎn)之間的距離,要求按如下格式輸出結(jié)果: A(x1,y1),B(x2,y2) Distance1=d1 Distance1=d2其中:x1、x2、y1、y2為指定的坐標(biāo)值,d1和d2為兩個(gè)坐標(biāo)點(diǎn)之間的距離?!咎崾尽?類Location的參考框架如下: class Location public: Location(double,double); double Getx(

7、) double Gety() double distance(Location &); friend double distance (Location &,Location &); private: double x,y;【#include iostream.h#include math.h class Location private:int x,y;public:Location(int i, int j):x(i),y(j) int Getx( ) return x;int Gety( ) return y;double distance(Location b);friend dou

8、ble distance(Location &a, Location &b);double distance(Location &a, Location &b) /友元函數(shù) int dx=a.x-b.x; int dy=a.y-b.y; return sqrt(dx*dx+dy*dy); double Location:distance(Location b) /成員函數(shù) int dx=x-b.x; int dy=y-b.y; return sqrt(dx*dx+dy*dy); void main( ) Location A(-10,-20),B(-40,60);coutA(A.Getx( )

9、,A.Gety( ),B(B.Getx( ),B.Gety( )endl; double d=A.distance(B); /調(diào)用成員函數(shù) coutDistance1= dendl; coutDistance2= distance(A,B)endl; /調(diào)用友元函數(shù)】 4.聲明一個(gè)Student類,在該類中包括一個(gè)數(shù)據(jù)成員score(分?jǐn)?shù))、兩個(gè)靜態(tài)數(shù)據(jù)成員total_score(總分)和count(學(xué)生人數(shù));還包括一個(gè)成員函數(shù)account()用于設(shè)置分?jǐn)?shù)、累計(jì)學(xué)生成績(jī)之和、累計(jì)學(xué)生人數(shù),一個(gè)靜態(tài)成員函數(shù)sum()用于返回學(xué)生的成績(jī)之和,另一個(gè)靜態(tài)成員函數(shù)average()用于求全班成績(jī)的

10、平均值。在main函數(shù)中,輸入 某班同學(xué)的成績(jī),并調(diào)用上述函數(shù)求出全班學(xué)生的成績(jī)之和和平均分。5.使用C+的string類,將5個(gè)字符串按逆轉(zhuǎn)后的順序顯示出來(lái)。例如,逆轉(zhuǎn)前的5個(gè)字符串是:Germany Japan America Britain France按逆轉(zhuǎn)后的順序輸出字符串是:France Britain America Japan Germany實(shí)驗(yàn)2 派生類與繼承2.1實(shí)驗(yàn)?zāi)康暮鸵?1) 掌握派生類的聲明方法和派生類構(gòu)造函數(shù)的定義方法。(2) 掌握不同繼承方式下,基類成員在派生類中的訪問(wèn)屬性。(3) 掌握在繼承方式下,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造規(guī)則。(4) 學(xué)習(xí)虛基類在

11、解決二義性問(wèn)題中的作用。2.2實(shí)驗(yàn)內(nèi)容與步驟1.輸入下列程序。/test4_1.cpp#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()cout”Base:x=”xendl;public:inty;int main()Derived bb;bb,setx(16);bb.sety(25);bb

12、.show();cout”Base:x=”bb.xendl;cout”Derived:y=”bb.yendl;cout”Base:x=”bb.getx()endl;cout”Derived:y=”bb.gety()endl;return 0;(1) 寫出程序的運(yùn)行結(jié)果。(2) 按以下要求,對(duì)程序進(jìn)行修改后再調(diào)試,指出調(diào)試中出錯(cuò)的原因。將基類Base中數(shù)據(jù)成員x的訪問(wèn)權(quán)限改為private時(shí),會(huì)出現(xiàn)哪些錯(cuò)誤?為什么?將基類Base中數(shù)據(jù)成員x的訪問(wèn)權(quán)限改為protected時(shí),會(huì)出現(xiàn)哪些錯(cuò)誤?為什么?在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為private時(shí),會(huì)出現(xiàn)哪些錯(cuò)誤?為什么?

13、在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為protected時(shí),會(huì)出現(xiàn)哪些錯(cuò)誤?為什么?2.編寫一個(gè)學(xué)生和教師的數(shù)據(jù)輸入和顯示程序。學(xué)生數(shù)據(jù)有編號(hào)、姓名、性別、年齡、系別和成績(jī),教師數(shù)據(jù)有編號(hào)、姓名、性別、年齡、職稱和部門。要求將編號(hào)、姓名、性別、年齡的輸入和顯示設(shè)計(jì)成一個(gè)類Person,并作為學(xué)生類Student和教師類Teacher的基類。供參考的類結(jié)構(gòu)如下:class Person.;class Student:public Person.;class Teacher:public Person.;3.按要求閱讀、編輯、編譯、調(diào)試和運(yùn)行以下程序。(1) 閱讀、編輯、編譯、調(diào)試

14、和運(yùn)行以下程序,并寫出程序的運(yùn)行結(jié)果。 /test4_3_1.cpp#include#includeusing namespace std;class MyArraypublic:MyArray(int leng);MyArray;void Input();void Display(string);protected:int*alist;int length;MyArray:MyArray(int leng)if(leng=0)cout”error length”;exit(1);alist=new int leng;length=leng;if(alist=NULL)cout”assign

15、failure”;exit(1);cout”MyArray類對(duì)象已創(chuàng)建?!眅ndl;MyArray:MyArray()delete alist;cout”MyArray類對(duì)象被撤銷。”endl;void MyArray:Display(string str)int i;int *p=alist;coutstrlength”個(gè)整數(shù):“;for(i=0;ilength;i+,p+)cout*p”;coutendl;void MyArray:Inputcout”請(qǐng)鍵盤輸入”length”個(gè)整數(shù):”;int i;int *p =alist;for(i=0;i*p;int main()MyArray a

16、(5);a.Input();a.Display(“顯示已輸入的”);return 0;(2) 聲明一個(gè)類SortArray繼承類MyArray,在該類中定義一個(gè)函數(shù),具有將輸入的整數(shù)從小到大進(jìn)行排序的功能?!咎崾尽吭诘冢?)步的基礎(chǔ)上可增加下面的參考框架:class SortArray : public MyArray public:void Sort();SortArray(int leng):MyArray(leng)cout”SortArray類對(duì)象已創(chuàng)建?!眅ndl;virtual SortArray();SortArray:SortArray()cout”SortArray類對(duì)象被撤

17、銷。”endl;void SortArray:Sort()/請(qǐng)自行編寫Sort函數(shù)的代碼,將輸入的整數(shù)從小到大排序。/并將主函數(shù)修改為:int main()SortArray a(5);s.Input();s.Display(“顯示排序以前的”);s.Sort();s.Display(“顯示排序以后的”);return 0;聲明一個(gè)類ReArray繼承類MyArray,在該類中定義一個(gè)函數(shù),具有將輸入的整數(shù)進(jìn)行倒置的功能?!咎崾尽吭诘冢?)步的基礎(chǔ)上可增加下面的參考框架:Class ReArray:public MyArrayPublic:Void reverse();ReArray(int

18、leng);Virtual ReArray();請(qǐng)讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和倒置函數(shù)ReArray,以及修改主函數(shù)。(3) 聲明一個(gè)類AverArray繼承類MyArray,在該類中定義一個(gè)函數(shù),具有求輸入的整數(shù)平均值的功能。 【提示】 在第(1)步的基礎(chǔ)上增加下面的參考框架:class AverArray:public MyArrayPublic:AverArray(int leng);AverArray();Double Aver();請(qǐng)讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和求平均值函數(shù)Aver(求解整數(shù)的平均值),以及修改主函數(shù)。(2) 聲明一個(gè)NewArray類,同時(shí)繼承了類SortA

19、rray,ReArray和AverArray,使得類NewArray的對(duì)象同時(shí)具有排序、倒置和求平均值的功能。在繼承的過(guò)程中聲明MyArray為虛基類,體會(huì)虛基類在解決二義性問(wèn)題中的作用。實(shí)驗(yàn)3 多態(tài)性3.1實(shí)驗(yàn)?zāi)康暮鸵?1) 了解多態(tài)性的概念。(2) 掌握運(yùn)算符重載的基本方法。(3) 掌握虛函數(shù)的定義和使用方法。(4) 掌握純虛函數(shù)和抽象類的概念和用法。3.2實(shí)驗(yàn)內(nèi)容與步驟1.分析并調(diào)試下列程序,寫出程序的輸出結(jié)果,并解釋輸出結(jié)果。/test5_1.cpp#includeusing namespace std;class Bpublic:virtual void f1 (double x)

20、cout”B:f1(double)”xendl;void f2(double x)cout”B:f2(double)”2*xendl;void f3(double x)cout”B:f3(double)”3*xendl;class D:public Bpublic:virtual void f1(double x)cout”D:f1(double)”xendl;void f2(double x)cout”D:f2(double)”2*xendl;void f3(double x)cout”D:f3(double)”3*xf1(1.23);pb-f1(1.23);pb-f2(1.23);pb-f

21、3(1.23);pb-f3(3.14);return 0;2.編寫一個(gè)程序,其中設(shè)計(jì)一個(gè)時(shí)間類Time,用來(lái)保存時(shí)、分、秒等私有數(shù)據(jù)成員,通過(guò)重載操作符“+”實(shí)現(xiàn)兩個(gè)時(shí)間的相加。要求將小時(shí)范圍限制在大于等于0,分鐘范圍限制在059,秒鐘范圍限制在059秒?!咎崾尽繒r(shí)間類Timepublic:Time(int h=0,int m=0,int s=0);Time operator+(Time&);void disptime(string);private: int hourse; int minutes; int seconds; 3.給出下面的抽象基類container; class conta

22、iner protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0; ;要求建立3個(gè)繼承container的派生類cube、sphere與cylinder,讓每一個(gè)派生類都包含虛函數(shù)surface_area()和volume(),分別用來(lái)計(jì)算正方體、球體和圓柱體的表面積及體積。要求寫出主程序,應(yīng)用C+的多態(tài)性,分別計(jì)算邊長(zhǎng)為6.0的正方體、半徑為5.0的球體,以及半徑為5.0和高為6.0的圓柱體的表面積和體積。4.

23、編寫一個(gè)程序,用于進(jìn)行集合的并、差和交運(yùn)算。例如輸入整數(shù)集合9 5 4 3 6 7和2 4 6 9 ,計(jì)算出它們進(jìn)行集合的并、差和交運(yùn)算后的結(jié)果?!咎崾尽縤. 可用以下表達(dá)式實(shí)現(xiàn)整數(shù)集合的基本運(yùn)算: s1+s2 兩個(gè)整數(shù)集合的并運(yùn)算s1-s2 兩個(gè)整數(shù)集合的差運(yùn)算s1*s2 兩個(gè)整數(shù)集合的交運(yùn)算ii. 參考以下Set類的框架,用于完成集合基本運(yùn)算所需的各項(xiàng)功能。 class set public: set:set(); void set:input(int d); int set:length(); int set:getd(int i); void set:disp(); set set:o

24、perator+(set s1); set set:operator-(set s1); set set:operator*(set s1); set set:operator=(set s1); protected: int len; int sMAX; ;實(shí)驗(yàn) 4 模板與異常處理4.1 實(shí)驗(yàn)?zāi)康暮鸵?(1)正確理解模板的概念。 (2)掌握函數(shù)模板和類模板的聲明和使用方法。 (3)學(xué)習(xí)簡(jiǎn)單的異常處理方法。4.2 實(shí)驗(yàn)內(nèi)容和步驟 1.分析并調(diào)試下列程序,寫出運(yùn)行結(jié)果并分析原因。 (1) /test6_1_1.cpp #include using namespace std; template

25、 T max (T x,T y) return xy? x:y;int max(int a,int b)return ab? a:b;double max (double a,double b)return ab? a:b;int main() cout”max(3,7) is “max(3,7)endl; return 0;(2)/test6_1_2.cpp #include using namespace std;int max(int a,int b)return ab? a:b;double max (double a,double b)return ab? a:b;int main(

26、) cout”max(3,7) is “max(3,7)endl; return 0;2. 編寫一個(gè)求任意類型數(shù)組中最大元素和最小元素的程序,要求將求最大元素和最小元素的函數(shù)設(shè)計(jì)成函數(shù)模板。3. 編寫一個(gè)程序,使用類模板對(duì)數(shù)組元素進(jìn)行排序、倒置、查找和求和?!咎崾尽吭O(shè)計(jì)一個(gè)類模板template class Array .;具有對(duì)數(shù)組元素進(jìn)行排序、倒置、查找和求和功能,然后產(chǎn)生類型實(shí)參分別為int型和double型的兩個(gè)模板類,分別對(duì)整型數(shù)組與雙精度數(shù)組完成所要求的操作。4. 編寫一個(gè)程序,求輸入數(shù)的平方根。設(shè)置異常處理,對(duì)輸入負(fù)數(shù)的情況給出提示。實(shí)驗(yàn) 5 C+的流類庫(kù)與輸入輸出5.1 實(shí)驗(yàn)?zāi)康暮鸵螅?)掌握C+格式化的輸入輸出方法。(2)掌握重載運(yùn)算符“”的方法。(3)掌握磁盤文件的輸入輸出方法。5.2 實(shí)驗(yàn)內(nèi)容和步驟 1. 下面給出的test7_1_1.cpp程序用于打印九九乘法表,但程序中存在錯(cuò)誤。請(qǐng)上機(jī)調(diào)試,使

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論