欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2013年07月16日 11:08:13   作者:  
構造函數(shù)的初始化列表僅僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序。成員初始化的次序就是定義成員的次序,第一個成員首先被初始化,然后是第二個,依次類推

首先,運行下圖中的C++代碼,輸出是什么?

復制代碼 代碼如下:

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是一個隨機的數(shù)字,n2為0。在C++中,成員變量的初始化順序與變量在類型中的聲明順序相同,而與它們在構造函數(shù)的初始化列表中的順序無關。因此在這道題中,會首先初始化n1,而初始n1的參數(shù)n2還沒有初始化,是一個隨機值,因此n1就是一個隨機值。初始化n2時,根據參數(shù)0對其初始化,故n2=0。

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

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

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

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

復制代碼 代碼如下:

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

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

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

相關文章

  • Linux網絡編程之socket文件傳輸示例

    Linux網絡編程之socket文件傳輸示例

    這篇文章主要介紹了Linux網絡編程之socket文件傳輸示例,對于基于Linux平臺的C程序員來說有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08
  • VSCode與Keil聯(lián)合開發(fā)STM32的流程

    VSCode與Keil聯(lián)合開發(fā)STM32的流程

    這篇文章主要介紹了VSCode與Keil聯(lián)合開發(fā)STM32的流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++實現(xiàn)動態(tài)煙花代碼

    C++實現(xiàn)動態(tài)煙花代碼

    這篇文章主要介紹了利用C++實現(xiàn)的放煙花程序,用到了EGE圖形庫,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2023-01-01
  • C語言棧順序結構實現(xiàn)代碼

    C語言棧順序結構實現(xiàn)代碼

    一個能夠自動擴容的順序結構的棧 ArrStack 實例 (GCC編譯),有需要的朋友可以參考一下
    2013-10-10
  • C++ virtual destructor虛擬析構函數(shù)

    C++ virtual destructor虛擬析構函數(shù)

    C++中基類采用virtual虛析構函數(shù)是為了防止內存泄漏。具體地說,如果派生類中申請了內存空間,并在其析構函數(shù)中對這些內存空間進行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構函數(shù)的相關知識,感興趣的朋友一起看看吧
    2021-05-05
  • ACE反應器(Reactor)模式的深入分析

    ACE反應器(Reactor)模式的深入分析

    本篇文章是對ACE反應器(Reactor)模式進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Opencv實現(xiàn)綠幕視頻背景替換功能

    Opencv實現(xiàn)綠幕視頻背景替換功能

    這篇文章主要為大家詳細介紹了Opencv實現(xiàn)綠幕視頻背景替換功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++分析構造函數(shù)與析造函數(shù)的特點梳理

    C++分析構造函數(shù)與析造函數(shù)的特點梳理

    本文對類的構造函數(shù)和析構函數(shù)進行總結,主要包括了構造函數(shù)的初始化、重載、使用參數(shù)和默認參數(shù),拷貝構造函數(shù)和析構函數(shù),希望能幫助讀者在程序開發(fā)中更好的理解類,屬于C/C++基礎
    2022-05-05
  • C語言中二維數(shù)組指針的簡要說明

    C語言中二維數(shù)組指針的簡要說明

    這篇文章主要介紹了C語言中二維數(shù)組指針的簡要說明,文章后也附送一個小練習題進行鞏固,需要的朋友可以參考下
    2015-08-08
  • C語言實現(xiàn)字母大小寫轉換的方法

    C語言實現(xiàn)字母大小寫轉換的方法

    這篇文章主要介紹了C語言實現(xiàn)字母大小寫轉換的方法,涉及C語言字符串的遍歷與轉換技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07

最新評論