類的建構函式和析構函式

2021-07-24 20:30:41 字數 2626 閱讀 5807

1. 類建構函式和析構函式的特點:

2. 類建構函式:專門用於構造新物件,將值賦予它們的資料成員。

建構函式是一種特殊的類成員函式,在建立類物件時被呼叫。建構函式的名稱和類名相同,但通過函式過載,可以建立多個重名的建構函式,條件是每個函式的引數列表都不同。

(1) 預設建構函式

每個類必須有乙個建構函式,若未顯示定義乙個類的建構函式,則c++提供乙個預設建構函式,該函式是個無參建構函式,僅負責建立物件,不做任何初始化工作。

如果類定義了乙個帶引數的建構函式,如果想使用無參建構函式,必須自己定義。

(2) 物件陣列

若要說明乙個帶有建構函式的類的物件陣列,這個類一般情況下會含有乙個不帶引數的建構函式或帶有預設建構函式的建構函式。

因此為這個物件陣列的每個元素呼叫了一次預設建構函式來初始化每個元素物件。

(3) 拷貝建構函式

(3.1)拷貝建構函式的呼叫

拷貝建構函式的功能是用乙個已有的物件來初始化乙個被建立的同類物件,是一種特殊的建構函式。

其形參是本類物件的引用,它的特殊功能是將引數代表的物件逐域拷貝到新建立的物件中。

如果使用者沒有宣告類的拷貝建構函式,系統會自動生成乙個預設拷貝建構函式,這個預設建構函式的功能是把初始物件的每個資料成員的值都複製到新建立的物件中。

宣告形式:

類名(類名 & 物件名)

class cat

;cat::cat(cat &other)

在下面四中情況系統會自動呼叫拷貝建構函式:

cat cat1;

cat cat2(cat1);

cat cat2(cat1);
f(cat a){}    

cat b;

f(b); //呼叫拷貝建構函式

cat f()

cat b;

b=f();

(3.2) 深拷貝建構函式和淺拷貝建構函式

由c++語言提供的預設拷貝建構函式只是對物件進行淺拷貝(逐個成員依次拷貝),即支付至物件空間而不複製資源。

如果物件的資料成員包括指向堆空間的指標,因為兩個物件都擁有同乙個資源,物件析構時,該資源將經歷兩次資源返還,就不能使用這種拷貝建構函式,必須自定義深拷貝建構函式。

例子(暫空)

同時滿足兩個條件,必須定義深拷貝建構函式:

#include#includeusing namespace std;

class person

4.2使用建構函式初始化表對資料成員進行初始化

circle::circle(float r):radius(r)

{}

注:資料成員的初始化的次序取決於它們在類定義中的宣告次序,與它們在成員初始化表中的次序無關。

常量和引用的初始化必須放在建構函式正在建立資料成員結構的時候,也就是必須用4.2方式初始化。

4.3 混合初始化

student::student(int n,int a,char * name):number(n),age(a)

4.4 使用拷貝建構函式初始化

(5) 類型別和基本資料型別的轉換

型別轉化就是將一種型別的值轉換為另一種型別的值。一般資料型別之間的轉換分為隱式型別轉換和顯示型別轉換。

類和基本資料型別之間的轉換可以通過以下方法進行:

5.1 建構函式用作型別轉換(基本資料型別->類型別)

3. 當物件被刪除時,程式將呼叫析構函式。每個類都只能有乙個析構函式。析構函式沒有引數,其名稱為類名稱前加上~。

如果建構函式使用了new,那必須提供使用delete的析構函式。

(1)析構函式被自動呼叫的三種情況

(2)析構函式的手工呼叫

除物件陣列之外,建構函式只能由系統自動呼叫,而析構函式可以使用下述方法手工呼叫。

物件名.類名::析構函式名();

(3)析構函式與建構函式的呼叫順序

建構函式和析構函式的呼叫順序剛好相反,限構造後析構

#include#includeclass student{

public:

student(char* pname="no name",int ssid=0)

{ strncpy(name,pname,40);

name[39]='\0';

id = ssid;

cout<<"constructing new student"<

//程式執行結果:

constructing new student randy

constructing new student wang

calling fn()

constructing copy of randy

in function fn()

destructing copy of randy

return from fn()

destructing wang

destructing randy

類 建構函式和析構函式

一.類 類定義的變數就是物件 1.建構函式 只有 建立物件的時候系統自動呼叫的函式 初始化物件 1 建構函式名與類名相同 2 建構函式沒有返回值 3 建構函式可以過載 注意 關於建構函式 1 如果建構函式被呼叫了,則一定有乙個新物件被建立了 2 如果有乙個新物件被建立,則一定有乙個建構函式被呼叫了 ...

類的建構函式和析構函式

1.把物件的初始化工作放在建構函式中,把清除工作放在析構函式中。當物件被建立時,建構函式被自動執行。當物件消亡時,析構函式被自動執行。這下就不用擔心忘了物件的初始化和清除工作。2.建構函式 析構函式與類同名,由於析構函式的目的與建構函式的相反,就加字首 以示區別。3.建構函式與析構函式都沒有返回值型...

類的建構函式和析構函式

類的資料成員是私有的,所以不能使用常規的賦值方法,像結構體那種的。一般來講。最好在建立物件的同時,對它進行初始化。例如 stock gift gift.buy 10,22.22 這種情況下,company 沒被賦值。程式宣告物件時,自動呼叫建構函式。一定不能將類成員名稱用作建構函式的引數名。建構函式...