最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、小問(wèn)題

下面的類(lèi)定義是否合法? 如果合法,ci 的值是什么,存儲(chǔ)在哪里?

下面編寫(xiě)代碼一探究竟(代碼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;
}

可以看到,編譯報(bào)錯(cuò),ci 沒(méi)有被初始化,如果要初始化,就得在 test() 那里進(jìn)行,且看下節(jié)初始化列表。

二、類(lèi)成員的初始化

C++ 中提供了初始化列表對(duì)成員變量進(jìn)行初始化

語(yǔ)法規(guī)則

所以代碼 1 可以寫(xiě)成:

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

這樣編譯就能通過(guò),得到想要的結(jié)果:

注意事項(xiàng)

  • 成員的初始化順序與成員的聲明順序相同
  • 成員的初始化順序與初始化列表中的位置無(wú)關(guān)
  • 初始化列表先于構(gòu)造函數(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;
}

輸出結(jié)果如下: 

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

三、類(lèi)中的 const 成員

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

編譯器無(wú)法直接得到 const 成員的初始值,因此無(wú)法進(jìn)入符號(hào)表成為真正意義上的常量。

下面看一段代碼:

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

下面為輸出結(jié)果:

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

四、初始化與賦值的不同

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

五、小結(jié)

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

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

相關(guān)文章

  • C++多線程編程和同步機(jī)制實(shí)例演示

    C++多線程編程和同步機(jī)制實(shí)例演示

    C++中的多線程編程和同步機(jī)制使得程序員可以利用計(jì)算機(jī)的多核心來(lái)提高程序的運(yùn)行效率和性能,本文將介紹多線程編程和同步機(jī)制的基本概念和使用方法
    2023-09-09
  • 深入解析 C++中std::stoul 函數(shù)

    深入解析 C++中std::stoul 函數(shù)

    std::stoul是 C++ 標(biāo)準(zhǔn)庫(kù)中的一個(gè)字符串轉(zhuǎn)換函數(shù),它用于將?std::string?或?std::wstring?轉(zhuǎn)換為?unsigned long?類(lèi)型的整數(shù),下面就來(lái)介紹一下
    2025-04-04
  • C語(yǔ)言獲取文件長(zhǎng)度的方法

    C語(yǔ)言獲取文件長(zhǎng)度的方法

    這篇文章主要介紹了C語(yǔ)言獲取文件長(zhǎng)度的相關(guān)知識(shí),包括使用標(biāo)準(zhǔn)庫(kù)方法和使用Linux系統(tǒng)調(diào)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • C語(yǔ)言項(xiàng)目全正整數(shù)后再計(jì)算的三種參考解答方法

    C語(yǔ)言項(xiàng)目全正整數(shù)后再計(jì)算的三種參考解答方法

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言項(xiàng)目全正整數(shù)后再計(jì)算的三種參考解答方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 遞歸形式與非遞歸形式的斐波那契數(shù)列的用法分析

    遞歸形式與非遞歸形式的斐波那契數(shù)列的用法分析

    本篇文章是對(duì)遞歸形式與非遞歸形式的斐波那契數(shù)列的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解QTreeWidget隱藏節(jié)點(diǎn)的兩種方式

    詳解QTreeWidget隱藏節(jié)點(diǎn)的兩種方式

    本文主要介紹了QTreeWidget隱藏節(jié)點(diǎn)的兩種方式,一種是直接隱藏,一種是間接隱藏,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語(yǔ)言形參與實(shí)參使用的差別講解

    C語(yǔ)言形參與實(shí)參使用的差別講解

    形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用, 離開(kāi)該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用,形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí), 主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送
    2023-02-02
  • QString和char以及string之間的賦值詳解

    QString和char以及string之間的賦值詳解

    QString 、string 、char* 之間免不了相互賦值。下面是自己的總結(jié)。需要的朋友可以過(guò)來(lái)參考下
    2013-10-10
  • C++ stringstream類(lèi)用法詳解

    C++ stringstream類(lèi)用法詳解

    這篇文章主要介紹了C++ stringstream類(lèi)用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言SetConsoleTextAttribute函數(shù)使用方法

    C語(yǔ)言SetConsoleTextAttribute函數(shù)使用方法

    這篇文章介紹了C語(yǔ)言SetConsoleTextAttribute函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論

长乐市| 双城市| 双鸭山市| 札达县| 舟曲县| 共和县| 武定县| 临沭县| 镇平县| 正定县| 兴安县| 榕江县| 手游| 什邡市| 饶河县| 太原市| 玉山县| 潞西市| 乐亭县| 盱眙县| 黄梅县| 新竹县| 青龙| 临漳县| 赣榆县| 营山县| 楚雄市| 油尖旺区| 天门市| 南平市| 龙岩市| 海伦市| 清水河县| 德惠市| 花莲市| 阿坝县| 当阳市| 临湘市| 县级市| 惠来县| 青神县|