兩個特殊的建構函式:
無參建構函式: 當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。
拷貝建構函式: 當類中沒有定義拷貝建構函式時,編譯器預設提供乙個建構函式,簡單的進行成員變數的值複製。
//(面試題)
class t
{};
//這裡面的其實裡面有隱藏的建構函式和拷貝建構函式
有乙個概念要理清:
在沒有任何建構函式的時候,編譯器才會為我們提供建構函式(這裡面拷貝建構函式也是建構函式)
拷貝建構函式的引數: const class_name&
text(const text& t)
拷貝建構函式的意義:1.拷貝建構函式是相容c語言的初始化方式(會牽涉到拷貝建構函式)
2.初始化行為能夠符號預期的邏輯(即兩個是狀態一樣)
// c方式
int i = 10
int b = i;
// c++方式
深拷貝是深入到裡面再去申請記憶體的操作。
物理狀態:是指每個物件在記憶體中的值是否相同 。
#include class test
int getj()
int* getp()
/*test(const test& t)
*/test(int v)
void free()
};int main()
//如果沒重寫拷貝建構函式
//呼叫預設淺拷貝只是單純的賦值,賦值之後兩個類的在記憶體中狀態是一樣的
拷貝建構函式一般性原則:自定義拷貝建構函式,必需需要實現深拷貝
17 物件的構造
如果沒有賦初值,全域性儲存區的成員變數初始值系統預設為0,棧空間和堆空間上成員變數初始值系統預設為隨機數。從程式設計的角度,物件只是變數,c 中可以定義與類名相同的特殊成員函式 建構函式。建構函式沒有任何返回型別的宣告。建構函式在物件定義時自動呼叫。每個物件在使用之前都應該初始化,建構函式用於物件初...
11 物件的構造
目錄從程式設計的角度,物件只是變數,因此 問題 程式中如何對乙個物件進行初始化,使得不管在什麼地方建立類物件,其成員變數的初始值都為固定值?解決方案1 存在的問題 解決方案2 建構函式 示例 建構函式 注意 物件定義和物件宣告不同 建構函式的自動呼叫 class test test int v in...
17 物件的構造(中)
1 建構函式 建構函式和普通函式的區別 普通函式的函式名可以隨機定義,而建構函式的函式名和類名一致 普通函式有返回值,而建構函式沒有返回值 普通函式可以定義引數,那麼建構函式可以定義引數嗎?class test test t 定義物件並呼叫建構函式 int main 我們的整個編譯過程分為好幾步 1...