c++建構函式的知識在各種c++教材上已有介紹,不過初學者往往不太注意觀察和總結其中各種建構函式的特點和用法,故在此我根據自己的c++程式設計經驗總結了一下c++中各種建構函式的特點,並附上例子,希望對初學者有所幫助。
c++類的建構函式詳解
一、 建構函式是幹什麼的
class counter
private:
// 資料成員
int m_value; }
該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作
eg: counter c1;
編譯系統為物件c1的每個資料成員(m_value)分配記憶體空間,並呼叫建構函式counter( )自動地初始化物件c1的m_value值設定為0 故:
建構函式的作用:初始化物件的資料成員。
二、 建構函式的種類
class complex
// 一般建構函式(也稱過載建構函式)
// 一般建構函式可以有各種引數形式,乙個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理)
// 例如:你還可以寫乙個 complex( int num)的建構函式出來
// 建立物件時根據傳入的引數不同呼叫不同的建構函式
complex(
double real,
double imag)
// 複製建構函式(也稱為拷貝建構函式)
// 複製構造函式引數為類物件本身的引用,用於根據乙個已存在的物件複製出乙個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製乙份到新建立的物件中
// 若沒有顯示的寫複製建構函式,則系統會預設建立乙個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述
complex(
const complex & c)
// 型別轉換建構函式,根據乙個指定的型別的物件建立乙個本類的物件
// 例如:下面將根據乙個double型別的物件建立了乙個complex物件
complex::complex(
double r)
// 等號運算子過載
// 注意,這個類似複製建構函式,將=右邊的本類物件的值複製給等號左邊的物件,它不屬於建構函式,等號左右兩邊的物件必須已經被建立
// 若沒有顯示的寫=運算子過載,則系統也會建立乙個預設的=運算子過載,只做一些基本的拷貝工作
complex &
operator=(
const complex &rhs )
// 複製等號右邊的成員到左邊的物件中
this->m_real = rhs.m_real;
this->m_imag = rhs.m_imag;
// 把等號左邊的物件再次傳出
// 目的是為了支援連等 eg: a=b=c 系統首先執行 b=c
// 然後執行 a= ( b=c的返回值,這裡應該是複製c值後的b物件)
return *
this; }
};下面使用上面定義的類物件來說明各個建構函式的用法:
void main()
三、思考與測驗
1. 仔細觀察複製建構函式
complex(
const complex & c)
為什麼函式中可以直接訪問物件c的私有成員? 答:
沒有理解清楚「私有成員」的關係。
首先,成員訪問控制符public、private以及protected都是基於類而言的,如果乙個類標記了private訪問許可權,其意思是——這個類以外的其他類(友元類除外)無法訪問被private修飾的本類成員,但是本類自身是不受成員訪問符限制的。
class my;
那麼在my類中有乙個private的成員num,其意思是——成員num對於my類以外的其他類(友元類除外)都不可見(或不可訪問),但my類自己並不受限於訪問許可權。
不知道你是否理解了:(mars_20):
C 建構函式詳解
c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value...
c 建構函式詳解
c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value...
C 建構函式詳解
c 建構函式的知識在各種c 教材上已有介紹,不過初學者往往不太注意觀察和總結其中各種建構函式的特點和用法,故在此我根據自己的c 程式設計經驗總結了一下c 中各種建構函式的特點,並附上例子,希望對初學者有所幫助。c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private ...