C++示例講解初始化列表方法
定義
我們先來(lái)看一個(gè)例子
Date(int year, int month, int day)//帶參構(gòu)造函數(shù) :_year(year) , _month(month) , _day(day) {}
這是一個(gè)簡(jiǎn)單的初始化列表案例,以一個(gè)冒號(hào)開始,接著是一個(gè)以逗號(hào)分隔的數(shù)據(jù)成員列表,每個(gè)"成員變量"后面跟一個(gè)放在括 號(hào)中的初始值或表達(dá)式。
特性
A.初始化列表能只能初始化一次,多次初始化會(huì)報(bào)錯(cuò)
Date(int year = 2022, int month = 4, int day = 19)//這是一般的構(gòu)造函數(shù) { _year = year; _month = month; _day = day; _day = day;//這里_day初始化了兩次,編譯器會(huì)報(bào)錯(cuò),每個(gè)成員只能初始化一次 }
B.編譯器也允許構(gòu)造函數(shù)賦初值和初始化列表初始化混用
Date(int year = 2022, int month = 4, int day = 19)//二者不沖突 : _year(year) //初始化 , _month(month) { _day = day;//注意這里和上面也不能兩次重復(fù)出現(xiàn),如_year(year)。這樣就重復(fù)了,初始化只能出現(xiàn)一次 }
C.const成員變量、引用成員變量、沒有默認(rèn)構(gòu)造函數(shù)的自定義類型成員只能在初始化列表初始化。
Date(int year = 2022, int month = 4, int day = 19) : _year(year) , _month(month) , _n(2) //const成員變量必須使用初始化列表進(jìn)行初始化 { _day = day; //_n = 2; //const成員變量不能在函數(shù)體內(nèi)初始化 } Date(int year = 2022, int month = 4, int day = 19) : _year(year) , _month(month) ,_ref(year)//引用成員變量要在初始化列表初始化 { _day = day; //_ref = year; //引用成員變量不能在函數(shù)體內(nèi)初始化 } Date(int year = 2022, int month = 4, int day = 19) : _year(year) , _month(month) , _a(20)//沒有默認(rèn)構(gòu)造函數(shù)的自定義類型成員變量必須在初始化列表進(jìn)行初始化 { _day = day; }
const成員變量、引用成員變量、沒有默認(rèn)構(gòu)造函數(shù)的自定義類型成員變量必須在初始化列表內(nèi)初始化的原因:
1.初始化列表是對(duì)象的成員變量定義的地方。
2.對(duì)象的內(nèi)置類型成員變量在初始化列表定義時(shí)沒有要求必須初始化,因此既可以在初始化列表進(jìn)行初始化,也可以在構(gòu)造函數(shù)體內(nèi)初始化。
3.const成員變量、引用成員變量、沒有默認(rèn)構(gòu)造函數(shù)的自定義類型成員變量不能先定義再初始化,它們?cè)诔跏蓟斜韮?nèi)定義,并且必須在定義時(shí)就初始化,因此必須在初始化列表內(nèi)初始化。
同時(shí)構(gòu)造函數(shù)的執(zhí)行可以分成兩個(gè)階段,初始化階段和計(jì)算階段,初始化階段先于計(jì)算階段。
初始化階段
所有類類型(class type)的成員都會(huì)在初始化階段初始化,即使該成員沒有出現(xiàn)在構(gòu)造函數(shù)的初始化列表中。
計(jì)算階段
一般用于執(zhí)行構(gòu)造函數(shù)體內(nèi)的賦值操作。
成員變量的初始化順序
class Date { public: Date(int year, int month, int day)//初始化是根據(jù)定義的先后順序,如year第一個(gè)定義,就第一個(gè)初始化 :_month(month)//第二個(gè)初始化 , _year(year) //第一個(gè)初始化 , _day(day) //第三個(gè)初始化 {} private: int _year; //第一個(gè)定義 int _month;//第二個(gè)定義 int _day; //第三個(gè)定義 };
到此這篇關(guān)于C++示例講解初始化列表方法的文章就介紹到這了,更多相關(guān)C++初始化列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)
本文重點(diǎn):應(yīng)該為多態(tài)基類聲明虛析構(gòu)器。一旦一個(gè)類包含虛函數(shù),它就應(yīng)該包含一個(gè)虛析構(gòu)器。如果一個(gè)類不用作基類或者不需具有多態(tài)性,便不應(yīng)該為它聲明虛析構(gòu)器。2015-10-10C語(yǔ)言實(shí)現(xiàn)餐飲管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)餐飲管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03