<四>構(gòu)造函數(shù)初始化列表
示例代碼1
點(diǎn)擊查看代碼
class CDate{
public:
CDate(int _year,int _month, int _day){
this->year=_year;
this->month=_month;
this->day=_day;
}
private:
int year;
int month;
int day;
};
class Student2{
public:
Student2(const char * _name , int _id, int _year,int _month ,int _day) {
this.ID=_id;
strcpy(name,_name);
}
private:
char name[20];
int ID;
CDate age;
};
int main(){
Student2 s("zhangsan",1001,2022,1,1);
return 1;
}
上面代碼編譯報(bào)錯(cuò),student類對(duì)象在初始化的時(shí)候,需要初始化成員CDate,但是由于CDate有自定義的構(gòu)造函數(shù),系統(tǒng)
找不到無參構(gòu)造函數(shù),所以報(bào)錯(cuò). 改造代碼后如下
示例代碼2
點(diǎn)擊查看代碼
class CDate{
public:
CDate(int _year,int _month, int _day){
this->year=_year;
this->month=_month;
this->day=_day;
}
private:
int year;
int month;
int day;
};
class Student2{
public:
Student2(const char * _name , int _id, int _year,int _month ,int _day) : ID(_id), age(_year,_month,_day){
strcpy(name,_name);
}
private:
char name[20];
int ID;
CDate age;
};
int main(){
MyString s1("abcd");
s1.printChar();
MyString s2=s1;//執(zhí)行拷貝構(gòu)造
s2.printChar();
MyString s3("1234");
s3=s1;//執(zhí)行賦值函數(shù)
s3.printChar();
return 1;
}
: ID(_id), age(_year,_month,_day)
構(gòu)造函數(shù)中 冒號(hào)右邊的 叫做 構(gòu)造函數(shù)初始化列表
Student2(const char * _name , int _id, int _year,int _month ,int _day) : ID(_id), age(_year,_month,_day){
strcpy(name,_name);
}
Student2(const char * _name , int _id, int _year,int _month ,int _day) : age(_year,_month,_day){
this.ID=_id
strcpy(name,_name);
}
上面兩種方式有什么區(qū)別?
: ID(_id), age(_year,_month,_day)
構(gòu)造函數(shù)初始化列表 中 ID(_id) 相當(dāng)于 int ID=_id; 定義同時(shí)初始化
Student2(const char * _name , int _id, int _year,int _month ,int _day) {
this.ID=_id // 這種方式相當(dāng)于 int ID; ID=_id; 先定義,然后再初始化.
strcpy(name,_name);
}
針對(duì)簡(jiǎn)單內(nèi)置的基礎(chǔ)數(shù)據(jù)類型這兩種方式匯編指令區(qū)別不大,但是如果是CDate類類型,如果像下面這樣
Student2(const char * _name , int _id, int _year,int _month ,int _day)
: ID(_id) ,
age(_year,_month,_day)
{
strcpy(name,_name);
}
編譯器其實(shí)會(huì)這樣做
1:CDate age=Date(_year,_month,_day);//定義age對(duì)象同時(shí)做初始化,并直接指定了構(gòu)造方式
如果是下面方式
Student2(const char * _name , int _id, int _year,int _month ,int _day)
{
this->ID=_id;
this->age=CDate(_year,_month,_day);
strcpy(name,_name);
}
編譯器其實(shí)會(huì)這樣做
1:先創(chuàng)建一個(gè) CDate 對(duì)象 age CDate age();//使用無參構(gòu)造函數(shù)
2:age=CDate(_year,_month,_day);
上面在第一步的時(shí)候,系統(tǒng)調(diào)用無參構(gòu)造函數(shù)的時(shí)候就報(bào)錯(cuò)了,因?yàn)闆]有無參的構(gòu)造函數(shù).
上一篇:<三>對(duì)象的淺拷貝和深拷貝問題
欄 目:C++
本文標(biāo)題:<四>構(gòu)造函數(shù)初始化列表
本文地址:http://mengdiqiu.com.cn/a1/c++/17093.html


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02qt用法小結(jié)2021_11_19
- 04-02Visual Studio C++ 默認(rèn) UTF-8 編碼及 *.edi
- 04-02<五>關(guān)于類的各類成
- 04-02【C++】extern "C"詳
- 04-02<六>指向類成員的指
- 04-02<三>對(duì)象的淺拷貝和
- 04-02<四>構(gòu)造函數(shù)初始化
- 04-02[C++]
- 04-02<二>掌握構(gòu)造函數(shù)和
- 04-02SLAM十四講CH8代碼
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載