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

C++深入講解初始化列表的用法

 更新時間:2022年04月19日 08:41:58   作者:清風自在?流水潺潺  
這篇文章主要介紹了C++成員初始化列表,除了可以使用構造函數(shù)對類成員進行初始化之外,C++還提供了另外一種初始化的方法,叫做成員初始化列表。下面來看看文章的詳細吧,需要的朋友可以參考一下

一、小問題

下面的類定義是否合法? 如果合法,ci 的值是什么,存儲在哪里?

下面編寫代碼一探究竟(代碼1):

#include <stdio.h>
 
class Test
{
private:
    const int ci;
public:
    Test()
    {
        ci = 10;
    }
    int getCI() 
    { 
        return ci; 
    }
};
 
 
int main()
{
    Test t;
    
    printf("t.ci = %d\n", t.getCI());
    
    return 0;
}

可以看到,編譯報錯,ci 沒有被初始化,如果要初始化,就得在 test() 那里進行,且看下節(jié)初始化列表。

二、類成員的初始化

C++ 中提供了初始化列表對成員變量進行初始化

語法規(guī)則

所以代碼 1 可以寫成:

#include <stdio.h>
 
class Test
{
private:
    const int ci;
public:
    Test() : ci(10)
    {
        //ci = 10;
    }
    int getCI() 
    { 
        return ci; 
    }
};
 
 
int main()
{
    Test t;
    
    printf("t.ci = %d\n", t.getCI());
    
    return 0;
}

這樣編譯就能通過,得到想要的結果:

注意事項

  • 成員的初始化順序與成員的聲明順序相同
  • 成員的初始化順序與初始化列表中的位置無關
  • 初始化列表先于構造函數(shù)的函數(shù)體執(zhí)行

下面看一段初始化列表使用的代碼:

#include <stdio.h>
 
class Value
{
private:
    int mi;
public:
    Value(int i)
    {
        printf("i = %d\n", i);
        mi = i;
    }
    int getI()
    {
        return mi;
    }
};
 
class Test
{
private:
    Value m2;
    Value m3;
    Value m1;
public:
    Test() : m1(1), m2(2), m3(3)
    {
        printf("Test::Test()\n");
    }
};
 
 
int main()
{
    Test t;
    
    return 0;
}

輸出結果如下: 

這段代碼很好的將上面的注釋事項體現(xiàn)出來了,初始化順序是 m1,m2,m3,輸出順序確是 m2,m3,m1,并且構造函數(shù)的函數(shù)體后于初始化列表的執(zhí)行。

三、類中的 const 成員

  • 類中的 const 成員會被分配空間的
  • 類中的 const 成員的本質(zhì)是只讀變量
  • 類中的 const 成員只能在初始化列表中指定初始值

編譯器無法直接得到 const 成員的初始值,因此無法進入符號表成為真正意義上的常量。

下面看一段代碼:

#include <stdio.h>
 
class Value
{
private:
    int mi;
public:
    Value(int i)
    {
        printf("i = %d\n", i);
        mi = i;
    }
    int getI()
    {
        return mi;
    }
};
 
class Test
{
private:
    const int ci;
    Value m2;
    Value m3;
    Value m1;
public:
    Test() : m1(1), m2(2), m3(3), ci(100)
    {
        printf("Test::Test()\n");
    }
    int getCI()
    {
        return ci;
    }
    int setCI(int v)
    {
        int* p = const_cast<int*>(&ci);
        
        *p = v;
    }
};
 
 
int main()
{
    Test t;
    
    printf("t.ci = %d\n", t.getCI());
    
    t.setCI(10);
    
    printf("t.ci = %d\n", t.getCI());
    
    return 0;
}

下面為輸出結果:

這段代碼說明 const 不是真正意義上的常量,只是只讀變量。 

四、初始化與賦值的不同

  • 初始化:對正在創(chuàng)建的對象進行初值設置
  • 賦:對已經(jīng)存在的對象進行值設置

五、小結

  • 類中可以使用初始化列表對成員進行初始化
  • 初始化列表先于構造函數(shù)體執(zhí)行
  • 類中可以定義 const 成員變量
  • const 成員變量必須在初始化列表中指定初值
  • const 成員變量為只讀變量

到此這篇關于C++深入講解初始化列表的用法的文章就介紹到這了,更多相關C++ 初始化列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言實現(xiàn)影院管理系統(tǒng)

    C語言實現(xiàn)影院管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)影院管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Qt專欄之模態(tài)與非模態(tài)對話框的實現(xiàn)

    Qt專欄之模態(tài)與非模態(tài)對話框的實現(xiàn)

    這篇文章主要介紹了Qt專欄之模態(tài)與非模態(tài)對話框的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • c語言求階乘精確值示例

    c語言求階乘精確值示例

    這篇文章主要介紹了c語言求階乘精確值示例,需要的朋友可以參考下
    2014-03-03
  • C語言通過三步翻轉(zhuǎn)法實現(xiàn)單詞倒置詳解

    C語言通過三步翻轉(zhuǎn)法實現(xiàn)單詞倒置詳解

    這篇文章主要為大家分享了用三步翻轉(zhuǎn)法將一句話的單詞進行倒置的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-05-05
  • 利用Qt繪制雷達掃描效果

    利用Qt繪制雷達掃描效果

    這篇文章主要為大家詳細介紹了如何利用Qt繪制簡單的雷達掃描效果,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-04-04
  • C++中對象的常引用、動態(tài)建立和釋放相關知識講解

    C++中對象的常引用、動態(tài)建立和釋放相關知識講解

    這篇文章主要介紹了C++中對象的常引用、動態(tài)建立和釋放相關知識講解,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • C語言進階棧幀示例詳解教程

    C語言進階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語言進階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    函數(shù)棧幀(stack frame)就是函數(shù)調(diào)用過程中在程序的調(diào)用棧(call stack)所開辟的空間,下面這篇文章主要給大家介紹了關于C語言函數(shù)棧幀的創(chuàng)建與銷毀的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • C++十六進制宏的用法詳解

    C++十六進制宏的用法詳解

    C++十六進制宏的用法;本文將詳細介紹
    2012-11-11
  • C語言線程對象和線程存儲的實現(xiàn)

    C語言線程對象和線程存儲的實現(xiàn)

    這篇文章主要介紹了C語言線程對象和線程存儲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論