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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論