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

下載本文檔

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

文檔簡介

實驗1類和對象1.1實驗目的和規(guī)定(1)理解類和對象的概念,掌握聲明類和定義對象的方法。(2)掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的實現(xiàn)方法。(3)初步掌握使用類和對象編制C++程序。(4)掌握對象數(shù)組、對象指針和string類的使用方法。(5)掌握使用對象、對象指針和對象引用作為函數(shù)參數(shù)的方法。(6)掌握類對象作為成員的使用方法。(7)掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的使用方法。(8)理解友元的概念和掌握友元的使用方法。1.2實驗內(nèi)容和環(huán)節(jié)輸入下列程序//test4-1.cpp#include<iostream>usingnamespacestd;classCoordinate{public:Coordinate(intx1,inty1){x=x1;y=y1;}Coordinate(Coordinate&p);~Coordinat(yī)e(){cout<<”Destructoriscalleded\n”;}intgetx(){returnx;}intgety(){returny;}private:intx,y;};Coordinat(yī)e::Coordinate(Coordinate&p){x=p.x;y=p.y;cout<<”copy-initializationConstructouiscalled\n”;}intmain(){Coordinatep1(3,4);Coordinat(yī)ep2(p1);Coordinat(yī)ep3=p2;cout<<”p3=(“<<p3.getx()<<”,”<<p3.gety()<<”)\n”;return(0);}寫出程序的運營結(jié)果。將Coordinate類中帶有兩個參數(shù)的構(gòu)造函數(shù)進行修改,在函數(shù)體內(nèi)增添下述語句:cout<<”Constructoriscalled.\n”;寫出程序的運營結(jié)果,并解釋輸出結(jié)果。(3)按下列規(guī)定進行調(diào)試:在主函數(shù)體內(nèi),添加下列語句:Coordinatep4;Coordinat(yī)ap5(2);調(diào)試程序時會出現(xiàn)什么錯誤?為什么?如何對已有的構(gòu)造函數(shù)進行適當修改?(4)通過以上第(2)步和第(3)步的修改后,結(jié)合運營結(jié)果分析:創(chuàng)建不同的對象時會調(diào)用不同的構(gòu)造函數(shù)。2.設計一個4*4魔方程序,讓魔方的各行值的和等于各列值的和,并且等于兩對角線值的和。例如一下魔方:313525921191517131123727291各行、各列以及對角線值的和都是64.【提醒】求4*4魔方的一般環(huán)節(jié)如下:(1)設立初始魔方的起始值和相鄰元素之間的差值。例如上述魔方的初始魔方的起始值(first)和相鄰元素之間的差值(step)分別為:first=1step=2(2)設立初始魔方元素的值。例如上述魔方的初始魔方為:135791113151719212325272931(3)生成最終魔方。方法如下:=1\*GB3①求最大元素值與最小元素值的和sum,該實例的sum是:1+31=32=2\*GB3②用32減去初始魔方所有對角線上元素的值,然后將結(jié)果放在本來的位置,這樣就可求得最終魔方。本例最終魔方如下:313525921191517131123727291本題的魔方類magic的參考框架如下:classmagic{public:voidgetdata();voidsetfirstmagic();voidgenerat(yī)emagic();voidprintmagic();privat(yī)e:intm[4][4];intstep;intfirst;intsum;};3.設計一個用來表達直角坐標系的Location類,在主程序中創(chuàng)建類Location的兩個對象A和B,規(guī)定A的坐標點在第3象限,B的坐標在第2象限,分別采用成員函數(shù)和友元函數(shù)計算給定兩個坐標點之間的距離,規(guī)定按如下格式輸出結(jié)果:A(x1,y1),B(x2,y2)Distance1=d1Distance1=d2其中:x1、x2、y1、y2為指定的坐標值,d1和d2為兩個坐標點之間的距離?!咎嵝选款怢ocation的參考框架如下:classLocation{public:Locat(yī)ion(double,double);doubleGetx()doubleGety()doubledistance(Location&);frienddoubledistance(Location&,Location&);privat(yī)e:doublex,y;};4.聲明一個Student類,在該類中涉及一個數(shù)據(jù)成員score(分數(shù))、兩個靜態(tài)數(shù)據(jù)成員total_score(總分)和count(學生人數(shù));還涉及一個成員函數(shù)account()用于設立分數(shù)、累計學生成績之和、累計學生人數(shù),一個靜態(tài)成員函數(shù)sum()用于返回學生的成績之和,另一個靜態(tài)成員函數(shù)average()用于求全班成績的平均值。在main函數(shù)中,輸入某班同學的成績,并調(diào)用上述函數(shù)求出全班學生的成績之和和平均分。5.使用C++的string類,將5個字符串按逆轉(zhuǎn)后的順序顯示出來。例如,逆轉(zhuǎn)前的5個字符串是:GermanyJapanAmericaBritainFrance按逆轉(zhuǎn)后的順序輸出字符串是:FranceBritainAmericaJapanGermany?實驗2派生類與繼承2.1實驗目的和規(guī)定(1)掌握派生類的聲明方法和派生類構(gòu)造函數(shù)的定義方法。(2)掌握不同繼承方式下,基類成員在派生類中的訪問屬性。(3)掌握在繼承方式下,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造規(guī)則。(4)學習虛基類在解決二義性問題中的作用。2.2實驗內(nèi)容與環(huán)節(jié)·1.輸入下列程序。//test4_1.cpp#include<iostream>usingnamespacestd;classBase{public:voidsetx(inti){x=i;}Intgetx(){returnx;}public:intx;};classDerived:publicBase{public:voidsety(inti){y=i;}intgety(){returny;}voidshow(){cout<<”Base::x=”<<x<<endl;}public:inty;};intmain(){Derivedbb;bb,setx(16);bb.sety(25);bb.show();cout<<”Base::x=”<<bb.x<<endl;cout<<”Derived::y=”<<bb.y<<endl;cout<<”Base::x=”<<bb.getx()<<endl;cout<<”Derived::y=”<<bb.gety()<<endl;return0;}寫出程序的運營結(jié)果。(2)按以下規(guī)定,對程序進行修改后再調(diào)試,指出調(diào)試中犯錯的因素。=1\*GB3①將基類Base中數(shù)據(jù)成員x的訪問權(quán)限改為privat(yī)e時,會出現(xiàn)哪些錯誤?為什么?=2\*GB3②將基類Base中數(shù)據(jù)成員x的訪問權(quán)限改為protected時,會出現(xiàn)哪些錯誤?為什么?=3\*GB3③在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為privat(yī)e時,會出現(xiàn)哪些錯誤?為什么?=4\*GB3④在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為protected時,會出現(xiàn)哪些錯誤?為什么?2.編寫一個學生和教師的數(shù)據(jù)輸入和顯示程序。學生數(shù)據(jù)有編號、姓名、性別、年齡、系別和成績,教師數(shù)據(jù)有編號、姓名、性別、年齡、職稱和部門。規(guī)定將編號、姓名、性別、年齡的輸入和顯示設計成一個類Person,并作為學生類Student和教師類Teacher的基類。供參考的類結(jié)構(gòu)如下:classPerson{...};classStudent:publicPerson{...};classTeacher:publicPerson{...};3.按規(guī)定閱讀、編輯、編譯、調(diào)試和運營以下程序。(1)閱讀、編輯、編譯、調(diào)試和運營以下程序,并寫出程序的運營結(jié)果。//test4_3_1.cpp#include<iostream>#include<string>usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray{};voidInput();voidDisplay(string);protected:int*alist;intlength;};MyArray::MyArray(intleng){if(leng<=0){cout<<”errorlength”;exit(1);}alist=newint[leng];length=leng;if(alist==NULL){cout<<”assignfailure”;exit(1);}cout<<”MyArray類對象已創(chuàng)建?!?lt;<endl;}MyArray::~MyArray(){delete[]alist;cout<<”MyArray類對象被撤消?!?lt;<endl;}voidMyArray::Display(stringstr){inti;int*p=alist;cout<<str<<length<<”個整數(shù):“;for(i=0;i<length;i++,p++)cout<<*p<<””;cout<<endl;}voidMyArray::Input{}{cout<<”請鍵盤輸入”<<length<<”個整數(shù):”;inti;int*p=alist;for(i=0;i<length;i++,p++)cin>>*p;}intmain(){MyArraya(5);a.Input();a.Display(“顯示已輸入的”);return0;}(2)聲明一個類SortArray繼承類MyArray,在該類中定義一個函數(shù),具有將輸入的整數(shù)從小到大進行排序的功能。【提醒】在第(1)步的基礎(chǔ)上可增長下面的參考框架:classSortArray:publicMyArray{public:voidSort();SortArray(intleng):MyArray(leng){cout<<”SortArray類對象已創(chuàng)建。”<<endl;}virtual~SortArray();};SortArray::~SortArray(){cout<<”SortArray類對象被撤消?!?lt;<endl;}voidSortArray::Sort(){//請自行編寫Sort函數(shù)的代碼,將輸入的整數(shù)從小到大排序。}//并將主函數(shù)修改為:intmain(){SortArraya(5);s.Input();s.Display(“顯示排序以前的”);s.Sort();s.Display(“顯示排序以后的”);return0;}聲明一個類ReArray繼承類MyArray,在該類中定義一個函數(shù),具有將輸入的整數(shù)進行倒置的功能。【提醒】在第(1)步的基礎(chǔ)上可增長下面的參考框架:ClassReArray:publicMyArray{Public:Voidreverse();ReArray(intleng);Virtual~ReArray();};請讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和倒置函數(shù)ReArray,以及修改主函數(shù)。(3)聲明一個類AverArray繼承類MyArray,在該類中定義一個函數(shù),具有求輸入的整數(shù)平均值的功能?!咎嵝选吭诘?1)步的基礎(chǔ)上增長下面的參考框架:classAverArray:publicMyArray{Public:AverArray(intleng);~AverArray();DoubleAver();}; 請讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和求平均值函數(shù)Aver(求解整數(shù)的平均值),以及修改主函數(shù)。聲明一個NewArray類,同時繼承了類SortArray,ReArray和AverArray,使得類NewArray的對象同時具有排序、倒置和求平均值的功能。在繼承的過程中聲明MyArray為虛基類,體會虛基類在解決二義性問題中的作用。實驗3多態(tài)性3.1實驗目的和規(guī)定(1)了解多態(tài)性的概念。(2)掌握運算符重載的基本方法。(3)掌握虛函數(shù)的定義和使用方法。 (4)掌握純虛函數(shù)和抽象類的概念和用法。3.2實驗內(nèi)容與環(huán)節(jié)1.分析并調(diào)試下列程序,寫出程序的輸出結(jié)果,并解釋輸出結(jié)果。//test5_1.cpp#include<iostream>usingnamespacestd;classB{public:virtualvoidf1(doublex){cout<<”B::f1(double)”<<x<<endl;}voidf2(doublex){cout<<”B::f2(double)”<<2*x<<endl;}voidf3(doublex){cout<<”B::f3(double)”<<3*x<<endl;}}classD:publicB{public:virtualvoidf1(doublex){cout<<”D::f1(double)”<<x<<endl;}voidf2(doublex){cout<<”D::f2(double)”<<2*x<<endl;}voidf3(doublex){cout<<”D::f3(double)”<<3*x<<endl;}};intmain(){Dd;B*pb=&d;D*pd=&d;pb->f1(1.23);pb->f1(1.23);pb->f2(1.23);pb->f3(1.23);pb->f3(3.14);return0;}2.編寫一個程序,其中設計一個時間類Time,用來保存時、分、秒等私有數(shù)據(jù)成員,通過重載操作符“+”實現(xiàn)兩個時間的相加。規(guī)定將小時范圍限制在大于等于0,分鐘范圍限制在0~59,秒鐘范圍限制在0~59秒?!咎嵝选繒r間類Time{public:Time(inth=0,intm=0,ints=0);Timeoperator+(Time&);voiddisptime(string);private:inthourse;intminutes;intseconds;};3.給出下面的抽象基類container;classcontainer{protected:doubleradius;public:container(doubleradius1);virtualdoublesurface_area()=0;virtualdoublevolume()=0;};規(guī)定建立3個繼承container的派生類cube、sphere與cylinder,讓每一個派生類都包含虛函數(shù)surface_area()和volume(),分別用來計算正方體、球體和圓柱體的表面積及體積。規(guī)定寫出主程序,應用C++的多態(tài)性,分別計算邊長為6.0的正方體、半徑為5.0的球體,以及半徑為5.0和高為6.0的圓柱體的表面積和體積。4.編寫一個程序,用于進行集合的并、差和交運算。例如輸入整數(shù)集合{954367}和{2469},計算出它們進行集合的并、差和交運算后的結(jié)果?!咎嵝选靠捎靡韵卤磉_式實現(xiàn)整數(shù)集合的基本運算:s1+s2兩個整數(shù)集合的并運算s1-s2兩個整數(shù)集合的差運算s1*s2兩個整數(shù)集合的交運算參考以下Set類的框架,用于完畢集合基本運算所需的各項功能。classset{public:set::set();voidset::input(intd);intset::length();intset::getd(inti);voidset::disp();setset::operator+(sets1);setset::operat(yī)or-(sets1);setset::operat(yī)or*(sets1);setset::operator=(sets1);protected:intlen;ints[MAX];};實驗4模板與異常解決4.1實驗目的和規(guī)定(1)對的理解模板的概念。(2)掌握函數(shù)模板和類模板的聲明和使用方法。(3)學習簡樸的異常解決方法。4.2實驗內(nèi)容和環(huán)節(jié)1.分析并調(diào)試下列程序,寫出運營結(jié)果并分析因素。(1)//test6_1_1.cpp#include<iostream>usingnamespacestd;template<typenameT>Tmax(Tx,Ty){returnx>y?x:y;}intmax(inta,intb){returna>b?a:b;}doublemax(doublea,doubleb){returna>b?a:b;}intmain(){cout<<”max(‘3’,’7’)is“<<max(‘3’,return0;}(2)//test6_1_2.cpp#include<iostream>usingnamespacestd;intmax(inta,intb){returna>b?a:b;}doublemax(doublea,doubleb){returna>b?a:b;}intmain(){cout<<”max(‘3’,’7’)is“<<max(‘3’,return0;}編寫一個求任意類型數(shù)組中最大元素和最小元素的程序,規(guī)定將求最大元素和最小元素的函數(shù)設計成函數(shù)模板。編寫一個程序,使用類模板對數(shù)組元素進行排序、倒置、查找和求和?!咎嵝选吭O計一個類模板template<classType>classArray{...};具有對數(shù)組元素進行排序、倒置、查找和求和功能,然后產(chǎn)生類型實參分別為int型和double型的兩個模板類,分別對整型數(shù)組與雙精度數(shù)組完畢所規(guī)定的操作。編寫一個程序,求輸入數(shù)的平方根。設立異常解決,對輸入負數(shù)的情況給出提醒。實驗5C++的流類庫與輸入輸出5.1實驗目的和規(guī)定(1)掌握C++格式化的輸入輸出方法。(2)掌握重載運算符“<<”和“>>”的方法。(3)掌握磁盤文獻的輸入輸出方法。5.2實驗內(nèi)容和環(huán)節(jié)1.下面給出的test7_1_1.cpp程序用于打印九九乘法表,但程序中存在錯誤。請上機調(diào)試,使得此程序運營后,可以輸出如下所示的九九乘法表。*12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281//test7_1_1.cpp#include<iostream>#include<iomanip>usingnamespace

溫馨提示

  • 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

提交評論