第三次實驗

2021-08-18 22:26:09 字數 3868 閱讀 7937

1、熟悉類的定義格式和類中成員的訪問許可權。

2、建構函式與析構函式的呼叫時機與順序。

3、掌握物件的定義以及物件的初始化的時機與方法。

實驗內容

1、下面程式sy3_1.cpp中用error標明的語句有錯吧,在不刪除和增加**行的情況下,改正錯誤語句,使其正確執行。

執行程式如下:

#include

using

namespace

std;  

class

aa  

;  int

main()  

錯誤結果如下:

正確程式如下:

#include

using

namespace

std;  

class

aa  

;  int

main()  

執行結果如下:

2、除錯下列程式。

#include

using

namespace

std;  

class

tpoint  

tpoint(tpoint &p);  

~tpoint()  

intgetx()  

intgety()  

private

:  int

x,y;  

};  

tpoint::tpoint(tpoint &p)  

intmain()  

在程式中,將tpoint類的帶有兩個引數的建構函式進行修改,在函式體內增添下述語句:

cout<

(1)寫出程式的輸出結果,並解釋輸出結果;

程式如下:

#include

using

namespace

std;  

class

tpoint  

tpoint(tpoint &p);  

~tpoint()  

intgetx()  

intgety()  

private

:  int

x,y;  

};  

tpoint::tpoint(tpoint &p)  

intmain()  

結果如下:

(2)按下列要求進行除錯:

在主函式體內,新增下列說明語句:

tpoint p4,p5(2);

出現的現象:

經過除錯後得到:

出錯原因:因為在類中沒有定義不帶引數和帶乙個引數的建構函式;

分析如下:如果要解決這個問題就要將帶兩個引數的建構函式改為預設的建構函式,就是可以將tpoint(int x,int y)改為tpoint(int x=0,int y=0) ; 在執行過程中,tpoint p1(4,9)和tpoint p4,p5(2);呼叫了建構函式,而tpoint p2(p1)和tpoint p3=p2是使用了拷貝建構函式。

3、對教材中li3_11.cpp的主函式做如下修改:

(1)將heapclass *pa1,*pa2 改為heapclass *pa1,*pa2,*pa3;

(2)在語句pa2=new heapclass 後增加語句pa3=new heapclass(5);

(3)將語句 if(!pa1||!pa2) 改為if(!pa1||!pa2||!pa3)

(4)在語句delete pa2 後增加語句delete pa3;

寫出程式的輸出結果,並解釋輸出結果。

程式如下:

#include

using

namespace

std;  

class

heapclass  

;  heapclass::heapclass(int

x)  

heapclass::heapclass()  

heapclass::~heapclass()  

intmain()  

cout<

<

delete

pa1;  

delete

pa2;  

delete

pa3;  

return

0;  

}  執行結果如下:

分析結果:在程式中,應用了三個指標*pa1,*pa2,*pa3來指向新建立的物件,並呼叫了乙個和不帶構造引數的建構函式對物件進                  行初始化,因此就輸出了前面三個語句;實驗結束後又呼叫了析構函式,之後就產生了後面三句的輸出結果。

4、請定義乙個矩形類(rectangle),私有資料成員為矩形長度(len)和寬度(wid),無參建構函式置len和wid為0,有參建構函式置len和wid為對應形參的值,另外還包括求矩形的周長、求矩形的面積、取矩形的長度和寬度、修改矩形的長度和寬度為對應形參的值、輸出矩形尺寸等公有成員函式。要求輸出矩形尺寸的格式為「length:長度,width:寬度」。(sy3_4.cpp)

實驗程式如下:

#include

using

namespace

std;  

class

rectangle  

rectangle(double

len,

double

wid)  

double

circumference()  

double

area()  

double

getl()  

double

getw()  

void

charge(

double

a,double

b)  

printf()  

private

:  int

len,wid;  

};  

intmain()  

執行結果:

1、類中私有成員的訪問許可權;  

只有類中的函式才能訪問類中私有成員。

2、建構函式和析構函式的呼叫順序;

在物件建立時,先用建構函式對其進行初始化,在程式結束後用析構函式釋放由建構函式分配的記憶體,而且析構函式的執行順序與建構函式的執行順序剛好相反。

一般物件:在物件的建立時對其進行初始化,可以用建構函式或者用拷貝建構函式進行初始化。

堆物件:用new進行分配空間,再呼叫建構函式進行初始化。

實驗總結

本次實驗,我對於類的定義格式和類中成員的訪問許可權、建構函式與析構函式的呼叫與順序和物件的定義以及物件的初始化的時機與方法進行了一些初步的了解和掌握;也學習到了一些新的知識和方法,並且學習到了建構函式和析構函式的呼叫順序以及物件初始化如何進行。同時也在不斷地修改程式和讀程式的過程中學習到了寫程式的一些新思路和方法。

第三次實驗

姓名 陳裕坤 學號 120705213 班級 12電信2班 目標 1.掌握c語言基本運算子和表示式用法 2.預習選擇和重複控制語句的用法.任務1 假設整型變數 a 的值是 1,b 的值是 2,c 的值是 3,請判斷各語句的值,寫出執行結果,並作簡短分析.1 x a b c 2 y a 2 b a c...

第三次實驗

一.問題及 02.檔名稱 第三次實驗 03.作 者 梁一意 04.完成日期 2017 年 4 月 6 日 05.版 本 號 v1.0 06.對任務及求解方法的描述部分 07.輸入描述 無 08.問題描述 個人所得稅計算器 09.程式輸出 個人所得稅及稅後收入 10.問題分析 略 11.演算法設計 略...

第三次實驗

1 下面程式sy3 1.cpp中用error標明的語句有錯,在不刪除和增加 行的情況下,改正錯誤語句,使其正確執行。sy3 1.cpp includeusing namespace std class aa tpoint tpoint p tpoint int getx int gety priva...