鄭州做網(wǎng)站推廣外包產(chǎn)品推廣方式
正文
構(gòu)造函數(shù)是在C++中用于創(chuàng)建和初始化對(duì)象的特殊函數(shù)。構(gòu)造函數(shù)可以根據(jù)不同的特性和參數(shù)進(jìn)行分類,以下是一些常見的構(gòu)造函數(shù)分類和詳細(xì)講解它們的調(diào)用方式:
默認(rèn)構(gòu)造函數(shù):
默認(rèn)構(gòu)造函數(shù)是一個(gè)特殊的構(gòu)造函數(shù),它沒有參數(shù),也可以沒有具體的實(shí)現(xiàn)代碼。如果沒有顯式定義構(gòu)造函數(shù),C++編譯器會(huì)為類生成一個(gè)默認(rèn)構(gòu)造函數(shù)。
當(dāng)對(duì)象被創(chuàng)建時(shí),如果沒有提供任何構(gòu)造函數(shù)的參數(shù),編譯器會(huì)自動(dòng)調(diào)用默認(rèn)構(gòu)造函數(shù)來初始化對(duì)象。
示例:
class MyClass {
public:// 默認(rèn)構(gòu)造函數(shù)(由編譯器生成)
};MyClass obj; // 調(diào)用默認(rèn)構(gòu)造函數(shù)
參數(shù)化構(gòu)造函數(shù):
參數(shù)化構(gòu)造函數(shù)接受一個(gè)或多個(gè)參數(shù),用于初始化對(duì)象的成員變量。
程序員必須自己定義參數(shù)化構(gòu)造函數(shù),編譯器不會(huì)自動(dòng)生成。
示例:
class MyClass {
public:// 參數(shù)化構(gòu)造函數(shù)MyClass(int value) : someValue(value) {}
private:int someValue;
};MyClass obj(42); // 調(diào)用參數(shù)化構(gòu)造函數(shù)
拷貝構(gòu)造函數(shù):
拷貝構(gòu)造函數(shù)是用于創(chuàng)建一個(gè)對(duì)象的副本的特殊構(gòu)造函數(shù)。
拷貝構(gòu)造函數(shù)通常接受一個(gè)同類型的對(duì)象作為參數(shù),以便復(fù)制其狀態(tài)。
當(dāng)對(duì)象按值傳遞、返回值傳遞或通過賦值操作進(jìn)行復(fù)制時(shí),拷貝構(gòu)造函數(shù)會(huì)被調(diào)用。
示例:
class MyClass {
public:// 拷貝構(gòu)造函數(shù)MyClass(const MyClass& other) : someValue(other.someValue) {}
private:int someValue;
};MyClass obj1;
MyClass obj2 = obj1; // 調(diào)用拷貝構(gòu)造函數(shù)
委托構(gòu)造函數(shù)(C++11及更高版本):
委托構(gòu)造函數(shù)允許一個(gè)構(gòu)造函數(shù)調(diào)用同一類的另一個(gè)構(gòu)造函數(shù),以避免代碼重復(fù)。
委托構(gòu)造函數(shù)通過在成員初始化列表中使用其他構(gòu)造函數(shù)的形式來調(diào)用。
示例:
class MyClass {
public:// 委托構(gòu)造函數(shù)MyClass(int value) : someValue(value) {}MyClass() : MyClass(0) {} // 委托構(gòu)造函數(shù)
private:int someValue;
};
隱式調(diào)用:
構(gòu)造函數(shù)可以在不直接調(diào)用的情況下自動(dòng)調(diào)用,例如通過對(duì)象的聲明和初始化、通過賦值操作、作為函數(shù)參數(shù)傳遞等方式。
示例:
MyClass obj1; // 調(diào)用默認(rèn)構(gòu)造函數(shù)
MyClass obj2 = obj1; // 調(diào)用拷貝構(gòu)造函數(shù)
MyClass obj3(obj1); // 調(diào)用拷貝構(gòu)造函數(shù)
這些不同類型的構(gòu)造函數(shù)允許程序員在創(chuàng)建對(duì)象時(shí)執(zhí)行不同的初始化操作,根據(jù)需要選擇合適的構(gòu)造函數(shù)。隨著C++標(biāo)準(zhǔn)的不斷發(fā)展,構(gòu)造函數(shù)的功能和用法也在不斷演進(jìn),使得對(duì)象的創(chuàng)建和初始化變得更加靈活和強(qiáng)大。
注意
- 無參構(gòu)造函數(shù) 調(diào)用的時(shí)候別加() 不然編譯器認(rèn)為 是一個(gè)函數(shù)聲明
- 匿名對(duì)象由于沒有被使用的話會(huì)被回收
- 不要利用 拷貝構(gòu)造函數(shù) 初始化匿名對(duì)象,就是說 如果 person ( p3 ) 等價(jià)于 person p3; 類似于重定義了