




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗1類和對象
1.1實驗?zāi)康暮鸵?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é)
1.輸入下列程序
//1est4—1.cpp
#include<iostream>
usingnamespacestd;
classCoordinate
{public:
Coordinate(intx1,inty1)
{x=x1;
y=yi;
}
Coordinate(Coordinate&p);
-Coordinate()
{cout?”Destructorisca1Ieded\n”;}
intgetx()
{returnx;}
intgety()
{returny;}
private:
intx,y;
);
Coordinate::Coordinate(Coordinate&p)
{x=p.x;
y=P.y;
cout?,,copy-initializationConstructouisca11ed\n,,;
)
intmain()
{Coordinatep1(3,4);
Coordinatep2(pl);
Coordinatep3=p2;
cout<<,,p3=C?p3.getx()?V?p3.gety()<<")\n";
return(0);
)
(1)寫出程序的運營結(jié)果。
(2)將Coordinate類中帶有兩個參數(shù)的構(gòu)造函數(shù)進行修改,在函數(shù)體內(nèi)增添下述語句:
cout<<,,Constructorisca11ed.\n";
寫出程序的運營結(jié)果,并解釋輸出結(jié)果。
(3)按下列規(guī)定進行調(diào)試:
在主函數(shù)體內(nèi),添加下列語句:
Coordinatep4;
Coordinatap5(2);
調(diào)試程序時會出現(xiàn)什么錯誤?為什么?如何對己有的構(gòu)造函數(shù)進行適當修改?
(4)通過以上第(2)步和第(3)步的修改后,結(jié)合運營結(jié)果分析:創(chuàng)建不同的對象時會調(diào)用
不同的構(gòu)造函數(shù)。
2.設(shè)計一個4*4魔方程序,讓魔方的各行值的和等于各列值的和,并且等于兩對角線值
的和。例如一下魔方:
313525
9211915
17131123
727291
各行、各列以及對角線值的和都是64.
【提醒】
求4*4魔方的一般環(huán)節(jié)如下:
(1)設(shè)立初始魔方的起始值和相鄰元素之間的差值。例如上述魔方的初始魔方的起始值
(first)和相鄰元素之間的差值(step)分別為:
first=l
step=2
(2)設(shè)立初始魔方元素的值。例如上述魔方的初始魔方為:
1357
9111315
17192123
25272931
(3)生成最終魔方。方法如下:
①求最大元素值與最小元素值的和sum,該實例的sum是:
1+31=32
②用32減去初始魔方所有對角線上元素的值,然后將結(jié)果放在本來的位置,這樣就可求
得最終魔方。本例最終魔方如下:
313525
9211915
17131123
727291
本題的魔方類magic的參考框架如下:
classmagic
{public:
voidgetdata();
voidsetfirstmagic();
voidgeneratemagic();
voidprintmagic();
private:
intm[4][4];
intstep;
intfirst;
intsum;
);
3.設(shè)計一個用來表達直角坐標系的Location類,在主程序中創(chuàng)建類Location的
兩個對象A和B,規(guī)定A的坐標點在第3象限,B的坐標在第2象限,分別采用成員函數(shù)和友元
函數(shù)計算給定兩個坐標點之間的距離,規(guī)定按如下格式輸出結(jié)果:
A(x1,yl),B(x2,y2)
Distancel=dl
Distancel=d2
其中:xl、x2、yl、y2為指定的坐標值,d1和d2為兩個坐標點之間的距離。
【提醒】
類Location的參考框架如下:
classLocation{
public:
Location(double,double);
doubleGetx()
doubleGety()
doub1edistance(Location&);
frienddoubledistance(Location&,Location&);
private:
doublex,y;
};
4.聲明一個Student類,在該類中涉及一個數(shù)據(jù)成員score(分數(shù))、兩個靜態(tài)數(shù)據(jù)成員total_sc
ore(總分)和count(學(xué)生人數(shù));還涉及一個成員函數(shù)account()用于設(shè)立分數(shù)、累計學(xué)生
成績之和、累計學(xué)生人數(shù),一個靜態(tài)成員函數(shù)sum()用于返回學(xué)生的成績之和,另一個靜態(tài)
成員函數(shù)average。用于求全班成績的平均值。在main函數(shù)中,輸入某班同學(xué)的成績,并
調(diào)用上述函數(shù)求出全班學(xué)生的成績之和和平均分。
5.使用C++的string類,將5個字符串按逆轉(zhuǎn)后的順序顯示出來。例如,逆轉(zhuǎn)前的5個字
符串是:
GermanyJapanAmericaBritainFrance
按逆轉(zhuǎn)后的順序輸出字符串是:
FranceBritainAmericaJapanGermany小
實驗2派生類與繼承
2.1實驗?zāi)康暮鸵?guī)定
(1)掌握派生類的聲明方法和派生類構(gòu)造函數(shù)的定義方法。
(2)掌握不同繼承方式下,基類成員在派生類中的訪問屬性。
(3)掌握在繼承方式下,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造規(guī)則。
(4)學(xué)習(xí)虛基類在解決二義性問題中的作用。
2.2實驗內(nèi)容與環(huán)節(jié)?
1.輸入下列程序。
//test4_1,cpp
#includeViostream>
usingnamespacestd;
classBase{
public:
voidsetx(inti)
{x=i;}
Intgetx()
{returnx;}
public:
intx;
};
c1assDerived:pub1icBase{
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();
coutBase::x="<<bb.x<<endl;
cout?^,Derived::y=,,?bb.y<<endl;
cout<<,,Base::x="<<bb.getx()?endl;
cout<<^Derived::y=,,<<bb.gety()<<endl;
return0;
)
(1)寫出程序的運營結(jié)果。
(2)按以下規(guī)定,對程序進行修改后再調(diào)試,指出調(diào)試中犯錯的因素。
①將基類Base中數(shù)據(jù)成員x的訪問權(quán)限改為Private^,會出現(xiàn)哪些錯誤?為什么?
②將基類Base中數(shù)據(jù)成員x的訪問權(quán)限改為protected時,會出現(xiàn)哪些錯誤?為什
么?
③在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為private時,會出現(xiàn)哪些錯
誤?為什么?
④在源程序的基礎(chǔ)上,將派生類Derived的繼承方式改為protected時,會出現(xiàn)哪些錯
誤?為什么?
2.編寫一個學(xué)生和教師的數(shù)據(jù)輸入和顯示程序。學(xué)生數(shù)據(jù)有編號、姓名、性別、年齡、
系別和成績,教師數(shù)據(jù)有編號、姓名、性別、年齡、職稱和部門。規(guī)定將編號、姓名、性別、
年齡的輸入和顯示設(shè)計成一個類Person,并作為學(xué)生類Student和教師類Teacher
的基類。
供參考的類結(jié)構(gòu)如下:
classPerson{
);
c1assStudent:publicPerson{
);
classTeacher:pub1icPerson(
};
3.按規(guī)定閱讀、編輯、編譯、調(diào)試和運營以下程序。
(1)閱讀、編輯、編譯、調(diào)試和運營以下程序,并寫出程序的運營結(jié)果。
//test4_3_1.cpp
#include<iostream>
#inc1ude<string>
usingnamespacestd;
classMyArray{
public:
MyArray(intleng);
-MyArray{};
voidInput();
voidDisplay(string);
protected:
int*alist;
intlength;
);
MyArray::MyArray(int1eng)
{if(leng<=0)
{cout<<,,errorlength^;
exit(1);
)
alist=newint[1eng];
length=1eng;
if(alist==NULL)
{coutVv”assignfai1ure
exit(1);
)
cout<v"MyArray類對象已創(chuàng)建。"<<end1;
MyArray::?MyArray()
{de1ete[]alist;
coutV<"MyArray類對象被撤消。ndl;
)
voidMyArray::Display(stringstr)
{inti;
int*p=a1ist;
cout?str<<lengthv<"個整數(shù):";
for(i=0;i<length;i++,p++)
cout?*p?,,n;
cout<<end1;
voidMyArray::Input{}
{cout<V”請鍵盤輸入"<<length<V"個整數(shù):";
inti;
int*p=alist;
for(i=0;i<1ength;i++,p++)
cin?*p;
}
intmain()
{MyArraya(5);
a.Input();
a.Display("顯示已輸入的”);
return0;
)
(2)聲明一個類SortArray繼承類MyArray,在該類中定義一個函數(shù),具有將輸入的整
數(shù)從小到大進行排序的功能。
【提醒】
在第(1)步的基礎(chǔ)上可增長下面的參考框架:
c1assSortArray:publicMyArray{
public:
voidSort();
SortArray(int1eng):MyArray(leng)
{cout<<,,SortArray類對象已創(chuàng)建?!?lt;Vendl;
virtual?SortArray();
);
SortArray:SortArray()
{cout?9,SortArray類對象被撤消。"<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:pub1icMyArray{
Public:
Voidreverse();
ReArray(int1eng);
Virtual-ReArray();
);
請讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和倒置函數(shù)ReArray,以及修改主函數(shù)。
(3)聲明一個類AverArray繼承類MyArray,在該類中定義一個函數(shù),具有求輸入
的整數(shù)平均值的功能。
【提醒】
在第(1)步的基礎(chǔ)上增長下面的參考框架:
classAverArrayipublicMyArray{
Public:
AverArray(int1eng);
~AverArray();
DoubleAver();
);
請讀者自行編寫構(gòu)造函數(shù)、析構(gòu)函數(shù)和求平均值函數(shù)Aver(求解整數(shù)的平均值),以及
修改主函數(shù)。
(2)聲明一個NewArray類,同時繼承了類SortArray,ReArray和AverArray,使得類
NewArray的對象同時具有排序、倒置和求平均值的功能。在繼承的過程中聲明MyArr
ay為虛基類,體會虛基類在解決二義性問題中的作用。
實驗3多態(tài)性
3.1實驗?zāi)康暮鸵?guī)定
(1)了解多態(tài)性的概念。
(2)掌握運算符重載的基本方法。
(3)掌握虛函數(shù)的定義和使用方法。
(4)掌握純虛函數(shù)和抽象類的概念和用法。
3.2實驗內(nèi)容與環(huán)節(jié)
1.分析并調(diào)試下列程序,寫出程序的輸出結(jié)果,并解釋輸出結(jié)果。
//test5_l.cpp
#inc1ude<iostream>
usingnamespacestd;
classB{
public:
virtua1voidfl(doublex)
{cout<v"B::f1(double),,?x<<end1;
)
voidf2(doub1ex)
{coutvv"B::f2(double)”<<2*x?end1;
)
voidf3(doublex)
{cou:f3(double)''<<3*x<<endl;
)
)
classD:publicB{
public:
virtualvoidf1(doublex)
{cout?MD::fl(double),,<<x?endl;
)
voidf2(doublex)
{cout?,5D::f2(double)”<<2*x<<end1;
)
voidf3(doublex)
{cout?,D::f3(double),,?3*x?end1;
);
intmain()
{Dd;
B*pb=&d;
D*pd=&d;
pb->fl(l.23);
pb->fl(1.23);
pb->f2(1.23);
Pb->f3(1.23);
pb->f3(3.14);
return0;
)
2.編寫一個程序,其中設(shè)計一個時間類Time,用來保存時、分、秒等私有數(shù)據(jù)成員,
通過重載操作符實現(xiàn)兩個時間的相加。規(guī)定將小時范圍限制在大于等于0,分鐘范圍
限制在0?59,秒鐘范圍限制在0?59秒。
【提醒】
時間類Time{
publie:
Time(inth=0,intm=0,ints=0);
Timeoperator+(Time&);
voiddisptime(string);
private:
inthourse;
intminutes;
intseconds;
);
3.給出下面的抽象基類container;
classcontainer
(
protected:
doubleradius;
pub1ic:
container(doubleradiusl);
virtualdoub1esurface_area()=0;
virtualdoub1evo1ume()=0;
);
規(guī)定建立3個繼承container的派生類cube、sphere與cylinder,讓每一個派生
類都包含虛函數(shù)surface_area()和volume。,分別用來計算正方體、球體和圓柱體的
表面積及體積。規(guī)定寫出主程序,應(yīng)用C++的多態(tài)性,分別計算邊長為6.0的正方體、
半徑為5.0的球體,以及半徑為5.0和高為6.0的圓柱體的表面積和體積。
4.編寫一個程序,用于進行集合的并、差和交運算。例如輸入整數(shù)集合{954367}
和{2469},計算出它們進行集合的并、差和交運算后的結(jié)果。
【提醒】
i.可用以下表達式實現(xiàn)整數(shù)集合的基本運算:
sl+s2兩個整數(shù)集合的并運算
sl-s2兩個整數(shù)集合的差運算
sl*s2兩個整數(shù)集合的交運算
ii.參考以下Set類的框架,用于完畢集合基本運算所需的各項功能。
c1assset{
publie:
set::set();
voidset::input(intd);
intset::length();
intset::getd(inti);
voidset::disp();
setset::operator+(setsi);
setset::operator-(setsi);
setset::operator*(sets1);
setset::operator=(sets1);
protected:
intlen;
ints[MAX];
);
實驗4模板與異常解決
4.1實驗?zāi)康暮鸵?guī)定
(1)對的理解模板的概念。
(2)掌握函數(shù)模板和類模板的聲明和使用方法。
(3)學(xué)習(xí)簡樸的異常解決方法。
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;
)
doub1emax(doublea,doubleb)
{returna>b?a:b;
intmain()
{cout<<"max('3','7')is“<Vmax('3',7)V<endl;
return0;
)
(2)
//test6_1_2.cpp
#include<iostream>
usingnamespacestd;
intmax(inta,intb)
{returna>b?a:b;
)
doub1emax(doub1ea,doub1eb)
{returna>b?a:b;
)
intmain()
{cout〈v”maxC3isu?maxC3,,,7,)?end1;
return0;
}
2.編寫一個求任意類型數(shù)組中最大元素和最小元素的程序,規(guī)定將求最大元素和最小元素
的函數(shù)設(shè)計成函數(shù)模板。
3.編寫一個程序,使用類模板對數(shù)組元素進行排序、倒置、查找和求和。
【提醒】
設(shè)計一個類模板
temp1ate<classType>
c1assArray(
};
具有對數(shù)組元素進行排序、倒置、查找和求和功能,然后產(chǎn)生類型實參分別為int型和double
型的兩個模板類,分別對整型數(shù)組與雙精度數(shù)組完畢所規(guī)定的操作。
4,編寫一個程序,求輸入數(shù)的平方根。設(shè)立異常解決,對輸入負數(shù)的情況給出提醒。
實驗5C++的流類庫與輸入輸出
5.1實驗?zāi)康暮鸵?guī)定
(1)掌握C++格式化的輸入輸出方法。
(2)掌握重載運算符和“>>”的方法。
(3)掌握磁盤文獻的輸入輸出方法。
5.2實驗內(nèi)容和環(huán)節(jié)
1.下面給出的test711.cpp程序用于打印九九乘法表,但程序中存在錯誤。請上機調(diào)
試,使得此程序運營后,可以輸出如下所示的九九乘法表。
*123456789
11
224
3369
4481216
5510152025
661218243036
77142128354249
8816243240485664
991827364554637281
//test7.1—1.cpp
#inc1ude<iostream>
#inc1ude<iomanip>
usingnamespacestd;
intmain()
(
inti,j;
cout?,,*";
for(i=l;i<=9;
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備租賃合同范本6
- 總裁離婚合同范本
- 志愿者讀書活動實施方案
- 經(jīng)典誦讀與中華文化傳承活動方案
- 院內(nèi)感染控制護理培訓(xùn)方案
- 消防控制室管理制度在學(xué)校的實施細則
- 互聯(lián)網(wǎng)行業(yè)2025年用戶體驗總結(jié)與計劃
- 法律與社會的交叉研究范文
- 知識產(chǎn)權(quán)實踐中的倫理與責(zé)任
- 石墨行業(yè)的國際市場定位與策略調(diào)整
- 05PowerPoint 2016演示文稿軟件電子課件 計算機基礎(chǔ)知識(Windows 7+Office 2016)
- 妊娠期高血壓剖宮產(chǎn)術(shù)后護理教學(xué)查房
- 暫予監(jiān)外執(zhí)行
- 急性腎小球腎炎講稿
- 義務(wù)教育語文課程標準(2022)測試題帶答案(20套)
- 公共廁所工程報價明細表
- 股骨頸骨折ppt精品
- 2023年江蘇農(nóng)牧科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 毛澤東詩詞鑒賞分析
- 小學(xué)數(shù)學(xué)-納稅教學(xué)設(shè)計學(xué)情分析教材分析課后反思
評論
0/150
提交評論