這篇文章主要講解了“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”吧!
創(chuàng)新互聯(lián)公司長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為穆棱企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè),穆棱網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
我們盡量不要在類內(nèi)對數(shù)據(jù)成員直接初始化,但是可以在類內(nèi)設(shè)一個函數(shù),這個函數(shù)可以對數(shù)據(jù)成員進行賦值
比如
class CStu { public://別忘了加public int age; void fun ()//直接通過這個函數(shù)對age進行賦值 { age = 12; } }; int main() { CStu cstu; cstu.fun();//聲明后調(diào)用一下這個函數(shù)就行 cout<<cstu.age<<endl; system("pause"); return 0; }
為了方便這種數(shù)據(jù)成員的賦值,c++就有了構(gòu)造函數(shù)這個東西
好處:對象一創(chuàng)建完,構(gòu)造函數(shù)就執(zhí)行,也就是自動執(zhí)行
1.使用形式
類名+(),注意:構(gòu)造函數(shù)無返回值
class CStu { public://別忘了加public int age; CStu()//這里就是構(gòu)造函數(shù)的定義了 { age = 12; } }; int main() { CStu cstu;//在聲明之后就執(zhí)行構(gòu)造函數(shù) cout<<cstu.age<<endl; system("pause"); return 0; }
當是指針變量是,new之后才相當于創(chuàng)建,才會調(diào)用構(gòu)造函數(shù),否則光聲明一個指針,不會執(zhí)行構(gòu)造函數(shù)
CStu*cstu;//光這樣,不會執(zhí)行構(gòu)造函數(shù)
只有這樣才可以
class CStu { public://別忘了加public int age; CStu() { age = 12; } }; int main() { CStu*cstu = new CStu;//new之后才會執(zhí)行構(gòu)造函數(shù) cout<<cstu->age<<endl; system("pause"); return 0; }
2.有參數(shù)的構(gòu)造函數(shù)
上面寫的是沒有參數(shù)的,其實構(gòu)造函數(shù)也可以有參數(shù)。
使用示例如下
class CStu { public://別忘了加public int age; CStu(int a ,float f)//這里還是正常的函數(shù)參數(shù) { cout<<a<<' '<<f<<endl; } }; int main() { CStu cstu(1,1.12f);//傳遞參數(shù)時,在聲明的時候,后面加個(),里面?zhèn)鬟f參數(shù) system("pause"); return 0; }
當是指針型時
CStu *p = new CStu(1,1.12f) ;//需要在new后面的類型后面加小括號
注意:①構(gòu)造函數(shù)的參數(shù)也可以設(shè)置默認值,當實參和默認值同時存在時,實參會把默認值覆蓋。
②多個構(gòu)造函數(shù)構(gòu)成重載,與上一篇講的一樣,系統(tǒng)會通過參數(shù)自動匹配需要執(zhí)行的構(gòu)造函數(shù)
3.類外定義(構(gòu)造)函數(shù)
類內(nèi)聲明,類外定義
使用示例
class CStu { public://別忘了加public int age; CStu(int a ,float f); }; CStu::CStu(int a ,float f)//這里一定要加上類名作用域,并且這里括號內(nèi)不寫默認值,原因在上一篇講過,就相當于重定義了。 { cout<<a<<' '<<f<<endl; } int main() { CStu *p = new CStu(1,1.12f) ; system("pause"); return 0; }
并且類名作用域要加在函數(shù)名之前
class CStu { public://別忘了加public int age; void fun(); }; void CStu::fun()//類名作用域一定要加在函數(shù)名之前 { cout<<1<<endl; } int main() { CStu *p = new CStu ; p->fun(); system("pause"); return 0; }
在多數(shù)情況下,比如int,float等等,初始化和賦值在用起來是基本沒有區(qū)別的。但是引用,const這兩個不能賦值,只能初始化,而構(gòu)造函數(shù)解決的是賦值的問題,那么誰來解決初始化的問題呢?沒錯,就是初始化列表
1.使用形式
構(gòu)造函數(shù)()后加: 再加變量名,再加括號,括號里面放初始化的值
使用示例如下
class CStu { public://別忘了加public int age; float f; CStu() : f(1.12f),age(10)//這樣就對f和age進行了初始化 { } };
注意:初始化順序只與聲明順序有關(guān),與初始化列表順序無關(guān),如上面的代碼,盡管初始化列表中f在age之前,但是初始化順序還是age在前,f在后。
引用的初始化列表這樣使用
class CStu { public://別忘了加public int age; int&a; CStu() : age(10),a(age)//其實很好想 { } }; int main() { CStu cstu; cout<<cstu.a<<endl; system("pause"); return 0; }
2.特殊地,在初始化列表中引用還可以這樣初始化
class CStu { public://別忘了加public int& a; CStu(int& c) : a(c)//這里括號內(nèi)一定是引用做參數(shù),如果只是int c的話,由于c是局部變量,在執(zhí)行完函數(shù)后就釋放了,就相當于訪問非法空間了 { } }; int main() { int d = 10; CStu cstu(d); cout << cstu.a << endl; system("pause"); return 0; }
感謝各位的閱讀,以上就是“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對c++構(gòu)造函數(shù)使用與初始化列表的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
文章題目:c++構(gòu)造函數(shù)使用與初始化列表的方法是什么
文章源于:http://www.chinadenli.net/article36/iidosg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、定制開發(fā)、微信公眾號、手機網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)