欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

c++ 構(gòu)造函數(shù)的初始化列表

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

首先,運(yùn)行下圖中的C++代碼,輸出是什么?

復(fù)制代碼 代碼如下:

class A
{
private:
 int n1;
 int n2;
public:
 A(): n2(0) , n1(n2 + 2)
 {
 }
 void Print()
 {
  cout<<"n1:"<<n1<<",n2:"<<n2<<endl;
 }
};
int main(void)
{
 A a;
 a.Print();
 return 0;
}

答案:
輸出n1是一個(gè)隨機(jī)的數(shù)字,n2為0。在C++中,成員變量的初始化順序與變量在類型中的聲明順序相同,而與它們在構(gòu)造函數(shù)的初始化列表中的順序無關(guān)。因此在這道題中,會(huì)首先初始化n1,而初始n1的參數(shù)n2還沒有初始化,是一個(gè)隨機(jī)值,因此n1就是一個(gè)隨機(jī)值。初始化n2時(shí),根據(jù)參數(shù)0對其初始化,故n2=0。

構(gòu)造函數(shù)的初始化列表僅僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序。成員初始化的次序就是定義成員的次序,第一個(gè)成員首先被初始化,然后是第二個(gè),依次類推。也就是說,C++編譯器很容易得到構(gòu)造函數(shù)的參數(shù)列表,獲取參數(shù),然后根據(jù)成員變量的聲明順序初始化成員變量(這是因?yàn)?,后聲明的變量有可能依賴先聲明的成員變量,因此要有先聲明先初始化,后聲明的后初始化)。

大家可能看到這里就會(huì)覺得,好麻煩啊,當(dāng)類中的一個(gè)數(shù)據(jù)成員是根據(jù)其他數(shù)據(jù)成員而初始化的時(shí)候,初始化列表的次序不能跟成員變量的聲明次序不一致,否則會(huì)出現(xiàn)不可預(yù)料的錯(cuò)誤。

的確是這樣的,所以有人就會(huì)想到,我干脆把初始化列表的那些操作都放到構(gòu)造函數(shù)的函數(shù)體內(nèi)對數(shù)據(jù)成員進(jìn)行賦值操作就行了,的確這樣做是可以的,但是有時(shí)構(gòu)造函數(shù)的初始化列表是必須的。

有些數(shù)據(jù)成員必須在構(gòu)造函數(shù)初始化列表中進(jìn)行初始化。對于這樣的成員,在構(gòu)造函數(shù)體內(nèi)對它們賦值是不起作用的。沒有默認(rèn)構(gòu)造函數(shù)的類類型的成員,以及const類型的成員變量和引用類型的成員變量,不管是哪種類型,都必須在構(gòu)造函數(shù)初始化列表中進(jìn)行初始化。
例如,下面的構(gòu)造函數(shù)定義就是錯(cuò)誤的:

復(fù)制代碼 代碼如下:

class A
{
private:
 int i;
 const int j;
 int &k;
public:
 A(int ii)
 {
  i = ii;
  j = ii;
  k = ii;
 }
};

記住,可以初始化 const 對象或引用類型的對象,但不能對它們賦值。在開始執(zhí)行構(gòu)造函數(shù)的函數(shù)體之前,要完成初始化,初始化 const 或引用類型的數(shù)據(jù)成員的唯一機(jī)會(huì)就是在構(gòu)造函數(shù)的初始化列表中。
例如,下面的構(gòu)造函數(shù)定義就是正確的:
復(fù)制代碼 代碼如下:

class A
{
private:
 int i;
 const int j;
 int &k;
public:
 A(int ii) : i(ii) , j(i) , k(ii)
 {
 }

 A() : j(0) , k(i)
 { }
};

int main(void)
{
 A a;
 return 0;
}

上一篇:哈希表實(shí)驗(yàn)C語言版實(shí)現(xiàn)

欄    目:C語言

下一篇:深入C語言內(nèi)存區(qū)域分配(進(jìn)程的各個(gè)段)詳解

本文標(biāo)題:c++ 構(gòu)造函數(shù)的初始化列表

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4306.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有