【C++】建構函式
建構函式
定義一個物件的同時,給它的資料成員賦初值——物件的初始化。
結合簡單變數的建立過程來認識一下:每一個變數都是一個記憶體空間,定義變數時並初始化,就是分配記憶體空間的時候,向記憶體單元中寫入了一個初始值。而物件的建立過程與變數類似。因為類的物件比較複雜,由於類的封裝性,它不允許在類的非成員函式中直接訪問類物件的私有和保護成員。所以通過類的建構函式,可以訪問類物件的私有和包含成員,對類物件資料成員進行初始化。
定義類時候,沒有定義建構函式,編譯系統會生成一個預設形式的隱含的建構函式,而它的函式體是空的,不具備任何功能。建構函式可以過載,然後例項化物件並初始化的時候,根據物件的引數型別和個數,從定義的建構函式中選擇相對應的。作為類的成員函式:行內函數/不帶任何引數/帶參數列及預設值/過載,根據具體問題,設計合適的建構函式將物件初始化。
特點:
命名必須和它的類相同。
沒有返回值,加Void是錯誤的。
宣告定義為共有函式,這樣物件才能夠訪問類的資料成員並進行初始化。
建立物件時系統自動呼叫;
拷貝建構函式
用於在建立新物件時將已存在物件的資料成員值拷貝給新物件,用物件初始化的時候,自動呼叫;如果使用者未定義,系統會自動生成預設的函式進行物件之間的位拷貝。
特點:與類名相同。形參是本類物件的引用,等同於普通建構函式和賦值操作符共同實現。
呼叫拷貝建構函式的情況
1.類的一個物件初始化同類的另一個物件。
2.函式的形參是類的物件,呼叫函式,將物件作為函式實參傳遞給形參時。
3.函式返回值是類的物件。
拷貝建構函式與物件賦值
拷貝建構函式是用一個存在的物件去構造另一個不存在的物件。物件賦值兩個物件都存在,把一個物件的值給兩個物件。
拷貝建構函式與建構函式在建立物件時,兩者之中有且僅有一個被呼叫。
派生類建構函式
派生類中,新增成員中包括基類繼承的成員,內嵌的其他物件,派生類的資料成員還包括了這些物件的資料成員。構造派生類物件,對基類資料成員,物件資料成員,及自己新增資料成員進行初始化。
派生類(引數總表):基類名(參數列),成員物件名(參數列) //引數總表的個數為基類參數列與成員物件參數列之和。
{
派生類新增資料成員;
}
單繼承建構函式的呼叫順序
1.呼叫基類建構函式
2.呼叫內嵌成員物件的建構函式
3.派生類自己的建構函式;
多繼承是單繼承的擴充套件,只是多繼承派生類基類數目多一些,建構函式呼叫順序從左向後。
虛基類的建構函式
為什麼會出現虛基類?多繼承中,派生類部分或全部直接基類,又是另一個共同基類派生來的。那麼直接基類中,就會包含從共同基類中繼承的相同名稱的成員。派生類物件中,同名資料成員在記憶體中同時擁有多個拷貝,同一成員函式就會有多個對映,出現間接二義性。虛基類解決了這個問題。
虛基類的定義融合在派生類的定義過程中。
class x1:virtual public x //x為虛基類;
建立物件的時候,使用的派生類為最遠派生類,只有最遠派生類的建構函式才呼叫虛基類的建構函式,保證虛基類子物件只初始化一次。
虛基類的建構函式先於非虛基類建構函式呼叫。
學習的過程
建構函式的不同的場景有不同的變化,但都是在最基本的建構函式上擴充套件的。掌握了基本的,擴充套件一下就都熟悉了。
相關文章
- C++ 建構函式和解構函式C++函式
- C++建構函式C++函式
- C++ 類建構函式和解構函式C++函式
- C++入門記-建構函式和解構函式C++函式
- [C++]顯示呼叫建構函式和解構函式C++函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- C++複製建構函式C++函式
- c++建構函式詳解C++函式
- C/C++——建構函式、複製建構函式和解構函式的執行時刻C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- C++再議建構函式及複製建構函式深度複製C++函式
- C++建構函式解構函式的執行過程C++函式
- c++建構函式詳解薦C++函式
- C++ Daily 《3》----建構函式可否是虛擬函式C++AI函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++型別轉換建構函式C++型別函式
- c++ 的學習 建構函式1C++函式
- C++拷貝建構函式詳解C++函式
- C++ 拷貝建構函式詳解C++函式
- c++學習筆記 -- 建構函式C++筆記函式
- C++基礎建構函式(constructor)C++函式Struct
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- C/C++—— C++中建構函式不能是虛擬函式的原因分析C++函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- 建構函式與解構函式函式
- C++:建構函式的分類和呼叫C++函式
- C++——建構函式之初始化列表C++函式
- C++複製控制:拷貝建構函式C++函式
- C++建構函式初始化順序C++函式
- ## 建構函式函式
- 建構函式函式
- [譯] 建構函式已死,建構函式萬歲!函式
- 類的建構函式和解構函式函式
- C++/CLI思辨錄之拷貝建構函式C++函式
- C++初學解惑(4)——建構函式(上) (轉)C++函式
- C++學習筆記-----類和建構函式C++筆記函式
- c# tcbs之建構函式呼叫建構函式示例C#函式