1.1 定義:與類同名的成員函式是建構函式,在該類的物件被建立時,自動被呼叫。
//在類中建構函式
#include
using
namespace std;
class
information
protected
:int weight;
int high;};
voidfn(
)int
main()
//在類外建構函式
#include
using
namespace std;
class
information
;information::
information()
}voidfn(
)int
main()
注意:建構函式沒有返回型別,所以函式體內不允許出現返回值,但可以出現無值返回語句"return;"又因為建構函式專門用於建立物件和為其初始化,所以它不能隨意被呼叫。
1.2帶引數的建構函式
::可以有多個引數
#include
#include
using
namespace std;
class
information
~information()
protected
:char name[20]
;};int
main()
1.3過載建構函式
建構函式可以被過載。
::建構函式是用來建立物件的,不能用來給物件賦值。
::只有預設了之後才能過載,若有多個缺省會造成錯誤
#include
#include
using
namespace std;
class
date
date
(int m,
int d=15)
//其他公共成員
protected
:int month;
int day;
int year;};
intmain()
1.4 預設建構函式
1. c++規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件。
2. 若未提供乙個類的建構函式,則c++提供乙個預設的建構函式(無參建構函式),僅負責創造物件,不做任何初始化操作。
3. 只要類定義了建構函式,則不提供預設的建構函式,即若定義了乙個函式,若需要無參建構函式,需要自己定義。
4. 與變數定義類似,在用預設建構函式創造物件時,如果創造的時全域性物件或者時靜態物件,則物件的位模式全為0,否則,物件是隨機的。
#include
using
namespace std;
class
student
;int
main()
//定義類等價於:
class
student
protected
:char name[20];};
::應當對一下情況區別:
#include
#include
using
namespace std;
class
information
/*加上:
information(){};
即可*/
protected
:char name[20]
;};int
main()
1.5 構造類成員#include
using
namespace std;
class
student
protected
:int semeshour;
int gpa;};
class
teacher};
class
tutorpair
protected
: student s;
teacher t;
int nomeetings;
//會晤次數};
intmain()
每個類負責自己的物件。
如果建構函式開啟了乙個資料夾,就需要關閉該資料夾;或者如果建構函式從堆中分配了記憶體,這塊內存在物件消失前就必須需要被釋放。析構函式允許類自動完成這些清理操作,而不必呼叫其他成員函式。
定義:析構函式也是特殊的類成員函式,無返回型別,沒有引數,不能隨意呼叫,也沒有過載,只是在類物件生命期結束的時候系統自動呼叫。
//定義乙個析構函式
classx~
x()protected
:char
*name;
};
當主函式執行到花括號處,析構函式一次被呼叫。其順序正好與建構函式相反。
ps:本文是學習筆記,內容來自清華大學出版社出版的c++程式設計教程(修訂版)——設計思想與實現。錢能著。
建構函式與析構函式
建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...
建構函式與析構函式
建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...
建構函式與析構函式
概述 乙個類有兩種特殊的成員函式 建構函式與析構函式。建構函式功能是在建立物件時,給資料成員賦初值,即物件的初始化。析構函式的功能是釋放乙個物件,在物件刪除前,用它做一些記憶體釋放工作,與建構函式的功能相反。建構函式 在物件建立時它會被自動執行,因此變數 物件的初始化 一般都放在建構函式中。1 物件...