實驗三 類與物件

2022-06-03 04:15:07 字數 2930 閱讀 5051

四、實驗結論

驗證性實驗部分

總結你對類、物件、建構函式、複製建構函式、析構函式的認識、理解和思考。

類與物件:

物件是對客觀事物的抽象,類是對物件的抽象。

(1)類型別的宣告:

class 類名

(2)什麼是建構函式?

通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立乙個物件時,作某些初始化的工作(例如對資料賦予初值)。c++允許同名函式,也就允許在乙個類中有多個建構函式。如果乙個都沒有,編譯器將為該類產生乙個預設的建構函式。此預設建構函式的功能是為物件分配記憶體,但無法為成員資料賦初值。 建構函式上惟一的語法限制是它不能指定返回型別,甚至void 也不行。

用於在建立物件時為物件分配記憶體 ,並可以將其初始化到特定的狀態。

1,不帶引數的建構函式:一般形式為: 類名 物件名()

2,帶引數的建構函式:不帶引數的建構函式,只能以固定不變的值初始化物件。帶引數建構函式的初始化要靈活的多,通過傳遞給建構函式的引數,可以賦予物件不同的初始值。

一般形式為:建構函式名(形參表); 建立物件使用時:類名 物件名(實參表);

如果類中沒有寫建構函式,編譯器會自動生成乙個隱含的預設建構函式,該函式是個空值。

小結: 建構函式的過載

建構函式用於在建立物件時為物件分配記憶體 ,並可以將其初始化到特定的狀態,是特殊的成員函式。

與普通函式類似,建構函式也可以被過載。

① 在乙個類的定義中,可以包含多個建構函式。這些建構函式有相同的函式名稱,但具有不同的形參列表。

② 定義物件時,編譯器會根據引數的個數、型別來決定呼叫哪乙個過載建構函式。

③ 當過載不帶引數的建構函式和帶預設形參值的建構函式時,程式可能會產生二義性。因此,在實際程式設計中應避免這一情形。

(3)析構函式:

當乙個類的物件離開作用域時,析構函式將被呼叫(系統自動呼叫)。析構函式的名字和類名一樣,不過要在前面加上 ~ 。對乙個類來說,只能允許乙個析構函式,析構函式不能有引數,並且也沒有返回值。析構函式的作用是完成乙個清理工作,如釋放從堆中分配的記憶體。

乙個類中可以有多個建構函式,但析構函式只能有乙個。物件被析構的順序,與其建立時的順序相反,即後構造的物件先析構。

(4)複製建構函式:

① 是特殊的建構函式: 其形參是本類物件的引用

② 複製建構函式在下述情形被呼叫:

使用已有的物件初始化乙個新的物件

複製建構函式有且只有乙個形參,而且這個形參必須是本類物件的引用。

在c++中,下面三種物件需要呼叫拷貝建構函式(有時也稱「複製建構函式」):

乙個物件作為函式引數,以值傳遞的方式傳入函式體;

乙個物件作為函式返回值,以值傳遞的方式從函式返回;

乙個物件用於給另外乙個物件進行初始化(常稱為賦值初始化);

如果類中沒有寫複製建構函式,編譯器會自動生成乙個隱含的複製建構函式,功能是把初始值物件的每個資料成員的值都複製到新建立的物件中。

通常的原則是:①對於凡是包含動態分配成員或包含指標成員的類都應該提供拷貝建構函式;②在提供拷貝建構函式的同時,還應該考慮過載"="賦值操作符號。

class  類名 

類名::類名(類名 &物件名)

ps:用已存在物件初始化該類的另乙個物件,兩種方法:1)clock hisclock(myclock); 《複製函式會被呼叫》 2)clock hisclock = myclock;《複製函式不被呼叫》

//4-11.定義並實現乙個 矩形類,有長,寬兩個屬性,由成員函式計算矩形的面積//

#includeusing namespace std;

class rectangle;

//類的實現

//建構函式初始化資料成員a,b

rectangle::rectangle(float a,float b)

//計算矩形的面積

float rectangle::rectanglearea()

//主函式實現

int main(){

float length,width;

cout<

cin>>length>>width;

class rectangle c(length,width); //定義的類的物件---矩形c

cout<

//4-20,定義乙個負數類complex,使得下面的**能夠工作。

//complex c1(3,5); ---用複數3+5i初始化c1

//complex c2=4.5; ---用實數4.5初始化c2

---將c1與c2相加,結果儲存在c1中

將c1輸出(這時的結果應該是7.5+5i)

#includeusing namespace std;

class complex{

public:

complex(double r0,double i0); //使用者自定義的建構函式《帶有兩個引數》

complex(double r0); //同上,《帶有乙個引數 >

complex(complex &c0); //使用者自定義的複製建構函式---形參必須是該類物件的引用

void add(complex &c0); //同上

1,操作還不是太熟練,2,析構函式只知道擺在類裡面 ~類名,但是下面就不知道怎麼用它。3,複製建構函式的原理

實驗三 類與物件(zxt)

以下為課上的實現虛數相加的內容,以及我的疑惑 懵逼 這個 存在問題,只能執行整數不能執行浮點數,以下為2.0版本 這回的又有一些問題,這個源 是老師ppt上的,main函式中的部分是我寫的。但是由於我想既能進行整數和浮點數的加法,所以我設定為了double型別。由此導致我只能呼叫double add...

實驗三 類與物件二

實驗內容4 vector.hpp include include using namespace std class vector int vector int vector int int n,int m 0 vector int vector int vector int vector int ...

實驗三 類與物件2

任務四 vector hpp ifndef vector int hpp define vector int hpp include using namespace std class vector int vector int vector int int size,int v cout 呼叫建構...