溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

c++構(gòu)造函數(shù)使用與初始化列表的方法是什么

發(fā)布時(shí)間:2023-02-21 09:36:21 來(lái)源:億速云 閱讀:132 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”吧!

一.構(gòu)造函數(shù)引

我們盡量不要在類內(nèi)對(duì)數(shù)據(jù)成員直接初始化,但是可以在類內(nèi)設(shè)一個(gè)函數(shù),這個(gè)函數(shù)可以對(duì)數(shù)據(jù)成員進(jìn)行賦值

比如

class CStu
{
   public://別忘了加public 
   int age;
   void fun ()//直接通過(guò)這個(gè)函數(shù)對(duì)age進(jìn)行賦值
   {
    age = 12;
   }    
};

int main()
{
    CStu cstu;
    cstu.fun();//聲明后調(diào)用一下這個(gè)函數(shù)就行
    cout<<cstu.age<<endl;
    system("pause");
    return 0;
}

為了方便這種數(shù)據(jù)成員的賦值,c++就有了構(gòu)造函數(shù)這個(gè)東西

二.構(gòu)造函數(shù)

好處:對(duì)象一創(chuàng)建完,構(gòu)造函數(shù)就執(zhí)行,也就是自動(dòng)執(zhí)行

1.使用形式

類名+(),注意:構(gòu)造函數(shù)無(wú)返回值

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;
}

當(dāng)是指針變量是,new之后才相當(dāng)于創(chuàng)建,才會(huì)調(diào)用構(gòu)造函數(shù),否則光聲明一個(gè)指針,不會(huì)執(zhí)行構(gòu)造函數(shù)

CStu*cstu;//光這樣,不會(huì)執(zhí)行構(gòu)造函數(shù)

只有這樣才可以

class CStu
{
   public://別忘了加public 
   int age;
   CStu()
   {
    age = 12;
   }
};

int main()
{
    CStu*cstu = new CStu;//new之后才會(huì)執(zhí)行構(gòu)造函數(shù)
    cout<<cstu->age<<endl;
    system("pause");
    return 0;
}

2.有參數(shù)的構(gòu)造函數(shù)

上面寫的是沒(méi)有參數(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ù)時(shí),在聲明的時(shí)候,后面加個(gè)(),里面?zhèn)鬟f參數(shù)
    system("pause");
    return 0;
}

當(dāng)是指針型時(shí)

CStu *p = new CStu(1,1.12f) ;//需要在new后面的類型后面加小括號(hào)

注意:①構(gòu)造函數(shù)的參數(shù)也可以設(shè)置默認(rèn)值,當(dāng)實(shí)參和默認(rèn)值同時(shí)存在時(shí),實(shí)參會(huì)把默認(rèn)值覆蓋。
多個(gè)構(gòu)造函數(shù)構(gòu)成重載,與上一篇講的一樣,系統(tǒng)會(huì)通過(guò)參數(shù)自動(dòng)匹配需要執(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)//這里一定要加上類名作用域,并且這里括號(hào)內(nèi)不寫默認(rèn)值,原因在上一篇講過(guò),就相當(dāng)于重定義了。
   {
    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等等,初始化和賦值在用起來(lái)是基本沒(méi)有區(qū)別的。但是引用,const這兩個(gè)不能賦值,只能初始化,而構(gòu)造函數(shù)解決的是賦值的問(wèn)題,那么誰(shuí)來(lái)解決初始化的問(wèn)題呢?沒(méi)錯(cuò),就是初始化列表

四.初始化列表

1.使用形式

構(gòu)造函數(shù)()后加: 再加變量名,再加括號(hào),括號(hào)里面放初始化的值

使用示例如下

class CStu
{
   public://別忘了加public 
   int age;
   float f;
   CStu() : f(1.12f),age(10)//這樣就對(duì)f和age進(jìn)行了初始化
   {
    
   }
  
};

注意:初始化順序只與聲明順序有關(guān),與初始化列表順序無(wú)關(guān),如上面的代碼,盡管初始化列表中f在age之前,但是初始化順序還是age在前,f在后。
引用的初始化列表這樣使用

class CStu
{
   public://別忘了加public 
   int age;
   int&a;
   CStu() : age(10),a(age)//其實(shí)很好想
   {
    
   }
  
};

int main()
{
    
    CStu cstu;
    cout<<cstu.a<<endl;
  
    system("pause");
    return 0;
}

2.特殊地,在初始化列表中引用還可以這樣初始化

class CStu
{
public://別忘了加public 
    int& a;
    CStu(int& c) : a(c)//這里括號(hào)內(nèi)一定是引用做參數(shù),如果只是int c的話,由于c是局部變量,在執(zhí)行完函數(shù)后就釋放了,就相當(dāng)于訪問(wèn)非法空間了
    {

    }

};

int main()
{
    int d = 10;
    CStu cstu(d);
    cout << cstu.a << endl;
    system("pause");
    return 0;
}

感謝各位的閱讀,以上就是“c++構(gòu)造函數(shù)使用與初始化列表的方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)c++構(gòu)造函數(shù)使用與初始化列表的方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎ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)容。

c++
AI