C 之建構函式和析構函式

2021-08-28 14:13:26 字數 1562 閱讀 3508

一、建構函式

1、物件的初始化和建構函式

類是一種抽象的資料型別,它不占用儲存空間,不能容納具體的資料。因此在類宣告中不能給資料成員賦初值。

例如:(錯誤)

class complex

與使用變數一樣,使用物件時也應該先定義,後使用。在定義物件時,對資料成員賦初值,稱為初始化。

例如:

class complex

;complex c1=;

如果類中包含私有的或保護的成員時,就不能用這種方法進行初始化。使用成員函式給資料成員賦初值既不方便也容易忘記,甚至可能出錯。c++提供了乙個更好的方法,利用建構函式來完成物件的初始化。

建構函式是一種特殊的成員函式,它主要用於為物件分配空間,進行初始化。使用者可根據初始化的要求設計函式體和函式引數。(在函式體中不僅可以對資料成員賦初值,而且可以包含其他語句)建構函式的名字必須與類名相同,而不能由使用者任意命名。它可以有任意型別的引數,但不能具有返回值型別。與普通成員函式一樣,建構函式的函式體可寫在類體內,也可寫在類體外。它不需要使用者來呼叫,而是在建立物件時自動執行(只執行一次)。如果沒有給類定義建構函式,則系統自動生成乙個預設建構函式。

在建立物件的同時,採用建構函式給資料成員賦初值,通常有以下兩種方式:

1.類名 物件名(實參表)

int main()

void init(double r,double i)

double abscomplex() };

int main()

;complex::complex(double r,double i):real(r),imag(i)

{}

我們為什麼要用成員初始化列表,什麼時候用初始化成員列表來初始化資料成員呢?原來,在c++中某些型別的成員是不允許在建構函式中用賦值語句直接賦值的。例如,對於用const修飾的資料成員,或是引用型別的資料成員,是不允許用賦值語句直接賦值的,只能用成員初始化列表對其進行初始化。

#includeusing namespace std;

class a

void print()

;date::date()

date::date(int y,int m,int d)

inline void date::showdate()

;complex::complex(double r,double i)

double complex::abscomplex()

int main()

;complex::complex(double r,double i)

若乙個物件是使用new運算子動態建立的,在使用delete運算子釋放它時,delete會自動呼叫析構函式

class string_data

~string_data()

void get_info(char*);

void sent_info(char*);

};

C 之建構函式和析構函式

我們已經知道了物件就是類的例項,二者的關係就相當於資料型別與它的變數的關係。每個物件區別於其他物件的地方就是依靠它的自身屬性,即資料成員的值。c 中,物件在定義的時候進行的資料成員的設定,稱為物件的初始化。同樣,在特定物件使用結束時,還要對資料成員進行一些清理工作。c 中對類的初始化和清理的工作,分...

C 建構函式和析構函式

1.建構函式是類的一種特殊方法,每次建立類的例項都會呼叫它。在建立乙個類的例項時,建構函式就像乙個方法一樣被呼叫,但不返回值。語法格式 訪問修飾符 類名 特性 1 其名字必須與類名相同,例如 public class myclass 2 不能被直接呼叫,必須通過new運算子來 呼叫。publiccl...

C 建構函式和析構函式

建構函式 class rectangel rectangel int l,int w 這是帶引數的建構函式,建構函式都是沒有返回值,並且和該類同名 int area 這是另一種形式的內聯函式,把宣告和定義寫在一起的也是內聯函式 private int length int width 析構函式 cl...