定義
它是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。
另外,乙個類可以有多個建構函式 ,我們可以根據其引數個數的不同或引數型別的不同來區分它們(這就是建構函式的過載)
特點
1.建構函式的命名必須和類名完全相同;
2.建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾。
(這就保證了它不僅什麼也不用自動返回,而且根本不能有任何選擇。而其他方法都有返回值,即使是void返回值。儘管方法體本身不會自動返回什麼,但仍然可以讓它返回一些東西,而這些東西可能是不安全的)
3.建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫;而一般的方法是在程式執行到它的時候被呼叫的;
4.當定義乙個類的時候,通常情況下都會顯示該類的建構函式,並在函式中指定初始化的工作也可省略,此預設建構函式是不帶引數的;
(而一般的方法不存在這一特點)
5.建構函式有回滾的效果,建構函式丟擲異常時,構造的是乙個不完整物件,會回滾,將此不完整物件的成員釋放;
定義格式
class類;類
::函式
(參數列)
例項**下面通過乙個例項**來說明建構函式的使用方法:
#include
using
namespace std;
class
line;/*
成員函式定義,包括建構函式
*/line::
line
(void
)void line::
setlength
(double len )
double line::
getlength
(void)/*
程式的主函式
*/int
main()
【注】這裡的建構函式是無引數的,當然我們也可以把它定義成引數的;
上述**的結果是:
定義
析構函式與建構函式相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作,比如釋放分配的空間,關閉檔案等;
【注】析構函式的作用並不是刪除物件,在物件撤銷它所占用的記憶體之前,做一些清理的工作。清理之後,這部分記憶體就可以被系統**再利用了;
特點
1.析構函式名與類名相同,只是再函式名前面加乙個位取反符號~;
2.析構函式不能帶任何引數,也沒有返回值(包括void);
3.只能有乙個析構函式,它是不能被過載的;
4.每個類有應該有乙個析構函式,如果沒有顯式定義,那麼系統會自動生成乙個預設的析構函式(預設的析構函式什麼也不做);
5.析構函式不能被顯式呼叫,只能由系統自動呼叫;
定義格式
class
類;類::~
類()
例項**下面通過乙個例項**來說明析構函式的使用方法:
#include
using
namespace std;
class
line;/*
成員函式定義,包括建構函式,析構函式
*/ line::
line
(void
)line::
~line
(void
)void line::
setlength
(double len )
double line::
getlength
(void)/*
程式的主函式
*/int
main()
析構函式使用原則其實,我們在許多類不需要顯式編寫析構函式。析構函式通常用於釋放在建構函式或在生命期內獲得的資源(如動態分配的記憶體)。廣義上講,析構函式的作用並不僅僅限於釋放資源方面,它可以執行任意操作,用來執行「物件即將被撤銷之前程式設計師所期待的任何操作。
如果類需要析構函式,則該類幾乎必然需要定義自己的複製建構函式和賦值運算子過載,這個規則稱為析構函式三法則。原因是如果類真的需要析構函式,則類中必然出現了指標型別成員且分配了資源(否則使用合成析構函式就可以了);
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...
c 建構函式和析構函式
1.c 的建構函式有預設建構函式,一般的建構函式,賦值建構函式,拷貝建構函式 複製建構函式 強制型別轉化建構函式。2.如果沒有定義建構函式和析構函式,則c 編譯器會按照 位拷貝 的方式提供預設的建構函式 不初始化 預設的賦值建構函式 淺賦值 預設的拷貝建構函式 淺拷貝 預設的析構函式。位拷貝要小心指...