您好,登錄后才能下訂單哦!
前言
創(chuàng)建一個(gè)對(duì)象時(shí),常常需要做某些初始化的工作,例如對(duì)數(shù)據(jù)成員賦值,注意,類(lèi)的數(shù)據(jù)成員是不能在聲明類(lèi)時(shí)初始化的
為了解決這個(gè)問(wèn)題,C++編譯器提供了 構(gòu)造函數(shù) 來(lái)處理對(duì)象的初始化。構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他成員函數(shù)不同,不需要用戶(hù)來(lái)調(diào)用它,而是在建立對(duì)象時(shí)自動(dòng)執(zhí)行。
2、構(gòu)造函數(shù)的分類(lèi)(三個(gè))
(1)無(wú)參構(gòu)造函數(shù)
Test() { ; }
(2)帶參數(shù)構(gòu)造函數(shù)
Test(int a,int b) { ; }
(3)賦值構(gòu)造函數(shù)
Test(const Test &obj) { ; }
構(gòu)造函數(shù)的調(diào)用
#include <iostream> using namespace std; class Test { public: Test() //無(wú)參構(gòu)造函數(shù) { m_a = 0; m_b = 0; cout << "無(wú)參構(gòu)造函數(shù)" << endl; } Test(int a) //一個(gè)參數(shù)的有參構(gòu)造函數(shù) { m_a = a; m_b = b; } Test(int a,int b) //有參構(gòu)造函數(shù) //調(diào)用有參構(gòu)造函數(shù)有三種方法 { m_a = a; m_b = b; cout << "有參構(gòu)造函數(shù)" << endl; } Test(const Test& obj) //賦值構(gòu)造函數(shù)(copy構(gòu)造函數(shù)) { cout << "我也是構(gòu)造函數(shù)" << endl; } public: void print() { cout << "普通成員函數(shù)" << endl; } protected: private: int m_a; int m_b; } void main() { Test t1; //無(wú)參構(gòu)造函數(shù)的調(diào)用 (對(duì)象后什么都不寫(xiě)) //有參函數(shù)的第一種調(diào)用方法 括號(hào)法 Test t1(1,2); //調(diào)用兩個(gè)參數(shù)的構(gòu)造函數(shù) t1.ptint(); //有參函數(shù)的第二種調(diào)用方法 =號(hào)法 (=操作不再是C語(yǔ)言中的功能。C++對(duì)= 進(jìn)行了功能性增強(qiáng)) Test t2 = (3,4); //調(diào)用一個(gè)參數(shù)的構(gòu)造函數(shù) 因?yàn)椋ǎ┨?hào)里是逗號(hào)表達(dá)式,結(jié)果為 4;即最后一個(gè)數(shù) t2.print(); Test t3 = 4; t2.print(); //跟 Test t2 = (3,4) 效果是一樣的 //有參函數(shù)的第三種調(diào)用方法 手動(dòng)的調(diào)用構(gòu)造函數(shù) Test t4 = Test(1,2); //調(diào)用了有兩個(gè)參數(shù)的構(gòu)造函數(shù) //直接調(diào)用構(gòu)造函數(shù),會(huì)產(chǎn)生匿名對(duì)象(涉及到匿名對(duì)象的去和留) cout << "hello" << endl; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。