一、建構函式
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...