色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++之初始化列表學習的總結

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 17:39 ? 次閱讀

大家好,本次給大家分享的內容是C++里面的初始化列表運用,希望對大家有幫助。

一、引出列表的使用:

1、在介紹列表之前,我們先來看看使用const關鍵字來修飾類中的成員會有什么事情發生,下面是一段簡單代碼:

#include <stdio.h>
class Test{
private:
const int a;
public:
int getA()

return a;

};
int main()

return 0;

編譯:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
root@txp-virtual-machine:/home/txp/c++#

從編譯結果來看,沒毛病,完全和正常修飾一個成員一樣;為了要顯示這里的細節問題,我們來創建一個對象,進而調用類里面的方法來獲取成員a的值:

#include <stdio.h>
class Test{
private:
const int a;
public:
int getA()

return a;

};
int main()

Test t;
printf("the t.a is %d",t.getA());
return 0;

編譯:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
test.cpp:3:7: error: uninitialized const member in ‘class Test’
test.cpp:5:16: note: ‘const int Test::a’ should be initialized
const int a;

通過編譯我們發現他報了一個錯誤,說成員a沒有進行初始化;那么沒有初始化,我們就給成員a一個值來進行初始化:

#include <stdio.h>
class Test{
private:
const int a;
public:
Test()

a=666;

int getA()

return a;

};
int main()

Test t;
printf("the t.a is %d",t.getA());
return 0;

我們是用了無參構造函數對a進行初始化(private里面的成員不能直接初始化,被保護住了,這個知識是基本常識哈),下面編譯看看,會有啥現象發生:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:7:6: error: uninitialized const member in ‘const int’ [-fpermissive]
Test()
^~~~
test.cpp:5:16: note: ‘const int Test::a’ should be initialized
const int a;

test.cpp:9:11: error: assignment of read-only member ‘Test::a’
a=666;

和沒有const關鍵字修飾的成員還不一樣,上面說a還是要初始化,也就是我們在構造函數體里面對a進行進行初始賦值是行不通的哦,那該如何解決解決這個問題呢?答案來了,就是我們的初始化列表。

二、初始化列表“閃亮登場”:

1、首先我們先來看一下初始haul列表的書寫格式:

ClassName::ClassName:
m1(v1),m2(v1,v2),m3(v3)


從上面我們可以發現,初始化列表就是在構造函數名稱后面且在構造函數體之間。同時這里我們也要注意初始化列表的使用原則:

(1)成員的初始化順序與成員的聲明順序相同。

(2)成員的初始化順序與初始化列表中的位置無關。

(3)初始化列表優先于構造函數的函數體執行。

我們接著上面那個初始的問題,現在我們使用初始化列表來看看啥情況:

#include <stdio.h>
class Test{
private:
const int a;
public:
Test():a(666)

// a=666;

int getA()

return a;

};
int main()

Test t;
printf("the t.a is %d",t.getA());
return 0;

編譯:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
root@txp-virtual-machine:/home/txp/c++# ls
a.out test.cpp
root@txp-virtual-machine:/home/txp/c++# ./a.out
the t.a is 666

問題被完美解決,是不是心里很開心哈。接下來我們繼續舉一個上面規則里面說的初始化順序問題:

#include <stdio.h>
class Value{
private:
int b;
public:
Value(int c)

printf("the c is %d",c);
b=c;

int getB()

return b;

};
class Test{
private:
Value d1;
Value d2;
Value d3;
public:
Test():d2(2),d1(1),d3(3)

printf("TXP ");

};
int main()

Test t;
return 0;

編譯:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
root@txp-virtual-machine:/home/txp/c++# ./a.out
the c is 1
the c is 2
the c is 3
TXP

從上面的輸出結果我們可以初始化的順序與成員的聲明順序有關,同時他也先于構造函數體的執行。

三、類中的const成員:

現在我們來總結一下在類中使用const關鍵字來修飾類中的屬性時,這時的屬性有啥特征:

(1)類中的const成員會被分配空間的。

(2)類中的const成員的本質是只讀變量。

(3)類中的const成員只能再初始化列表中指定初始值

(4)編譯器無法直接得到const成員的初始值,因此無法進入到符號表成為真正意義上的常量(也就是說這里的只讀變量,我們還是可以通過一定的手段來改變其值的大小。)

下面我們來看一個例子:

#include <stdio.h>
class Value{
private:
int b;
public:
Value(int c)

printf("the c is %d",c);
b=c;

int getB()

return b;

};
class Test{
private:
const int f;
Value d1;
Value d2;
Value d3;
public:
Test():d2(2),d1(1),d3(3),f(888)

printf("TXP");

int getF()

return f;

int setF(int i)

int *p = const_cast<int*>(&f);
*p = i;

};
int main()

Test t;
printf("the f is %d",t.getF());
t.setF(666);
printf("the f is %d",t.getF());

編譯:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp
root@txp-virtual-machine:/home/txp/c++# ./a.out
the c is 1
the c is 2
the c is 3
TXP
the f is 888
the f is 666

通過上面的例子,我們的結論都得到了一一驗證。

四、總結:

(1)類中可以使用初始化列表對成員進行初始化。

(2)初始化列表先于構造函數體執行。

(3)類中可以定義const成員變量。

(4)const成員變量必須在初始化列表中指定初值。

(5)const成員變量只為只讀變量。

以上就是本次的學習分享。純屬個人學習c++的成長之旅。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可編程邏輯
    +關注

    關注

    7

    文章

    524

    瀏覽量

    44595
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74819
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    音頻無法初始化是怎么回事?

    初始化代碼如圖 軟硬件版本信息 rtos_only01科技開發板 錯誤日志
    發表于 04-27 06:53

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發燒友網站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費下載
    發表于 02-26 17:32 ?658次下載

    ads1252的初始化程序是什么?

    我想問下ads1252的初始化程序是什么?我整了半天也沒整明白?有更多關于ads1252的資料嗎
    發表于 02-13 06:45

    AFE031初始化的過程應該是什么?

    得到正確的RFE1和RFE2電壓值. 我工程中得到RFE1為2.6v左右(文檔上說的是PA_VS/2約為7.65v左右),RFE2 則為0(而文檔中說的是AVD/2約為1.5v左右). 2.對AFE031初始化的過程應該是什么?有沒有參考文檔給小弟學習下....... 等
    發表于 01-15 06:54

    EE-359:ADSP-CM40x啟動時間優化和器件初始化

    電子發燒友網站提供《EE-359:ADSP-CM40x啟動時間優化和器件初始化.pdf》資料免費下載
    發表于 01-13 16:33 ?0次下載
    EE-359:ADSP-CM40x啟動時間優化和器件<b class='flag-5'>初始化</b>

    EE-88:使用21xx編譯器在C初始化變量

    電子發燒友網站提供《EE-88:使用21xx編譯器在C初始化變量.pdf》資料免費下載
    發表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在<b class='flag-5'>C</b>中<b class='flag-5'>初始化</b>變量

    OMAP5912多媒體處理器初始化參考指南

    電子發燒友網站提供《OMAP5912多媒體處理器初始化參考指南.pdf》資料免費下載
    發表于 12-17 16:20 ?0次下載
    OMAP5912多媒體處理器<b class='flag-5'>初始化</b>參考指南

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結合提供了強大的存儲解決方案。然而,不斷電初始化失效問題可能會導致系統穩定性和數據完整性受損。我們將STM32F407與SD NAND集成時可能遇到的初始化問題,并提供專業的解決方案。
    的頭像 發表于 12-11 10:51 ?845次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問題

    的圖; 2.第二張圖是該變量在文件中的所有操作,第一行是初始化,該行代碼在初始化部分最后一個,執行完就是主循環了; 3.第2,3行也是對變量的賦值,在主循環中; 4.第4行已注釋; 5.第6行是對變量
    發表于 12-09 18:06

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?874次閱讀
    基于旋轉平移解耦框架的視覺慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    電子發燒友網站提供《TMS320C6000 McBSP初始化.pdf》資料免費下載
    發表于 10-26 10:10 ?0次下載
    TMS320<b class='flag-5'>C</b>6000 McBSP<b class='flag-5'>初始化</b>

    使用TAS5721數字功放,不能正常初始化該芯片,為什么?

    我們使用TAS5721數字功放,按參考DATASHEET和相關技術文檔,發現不能正常初始化該芯片,I2S輸入已按芯片的默認狀態正確無誤,但無功放輸出。我們參考TAS571X.C代碼進行調整,發現
    發表于 10-18 07:41

    如何在i.MX RT微控制器上初始化LWIP協議棧

    在i.MX RT微控制器上初始化LWIP協議棧是一個復雜但有趣的過程,它涉及多個步驟和關鍵組件的配置.
    的頭像 發表于 10-12 11:48 ?729次閱讀
    如何在i.MX RT微控制器上<b class='flag-5'>初始化</b>LWIP協議棧

    Keil中變量不被初始化方法

    有些時候在我們的應用過程中要求變量有連續性,或者現場保留,例如Bootloader跳轉,某種原因的復位過程中我們有些關鍵變量不能被初始化,在不同的編譯環境下有不同的設置,本文就這個操作做總結,分別
    的頭像 發表于 08-30 11:47 ?1342次閱讀
    Keil中變量不被<b class='flag-5'>初始化</b>方法

    瀚海微SD NAND應用之SD協議存儲功能描述2 初始化命令

    初始化和識別過程: 總線激活后,主機啟動卡初始化和識別過程。 初始化過程從SD SEND OP COND (ACMD41)開始,通過設置其操作條件和OCR中的HCS位。HCS (Host
    的頭像 發表于 07-22 10:54 ?676次閱讀
    瀚海微SD NAND應用之SD協議存儲功能描述2 <b class='flag-5'>初始化</b>命令
    主站蜘蛛池模板: 人成片在线观看亚洲无遮拦 | 神马影院在线eecss伦理片 | 1a级毛片免费观看 | 狼人大香伊蕉国产WWW亚洲 | 国产午夜精AV在线麻豆 | 亚洲手机在线人成视频 | 亚洲 欧美 中文 日韩 视频 | 青青青青青青草 | 无码国产成人777爽死在线观看 | 国产精品VIDEOS麻豆TUBE | 国产色精品久久人妻无码 | 日韩精品在线看 | 国产原创剧情麻豆在线 | 国产成人精品三级在线 | 最美白嫩的极品美女ASSPICS | 94色94色永久网站 | 干性感美女 | 国产精品久久久久久亚洲影视 | 一亲二脱三插 | 我的家庭女教师 | 野花香在线观看免费高清播放视频 | 小鸟酱喷水 | 激情男女高潮射精AV免费 | 四库影院永久国产精品 | 免费观看成人www精品视频在线 | 激情A片久久久久久久 | 极品少妇粉嫩小泬啪啪AV | 狠很橹快播 | 一级片mp4 | 少妇被躁爽到高潮无码久久 | 皮皮色狼网 | 国产小视频在线高清播放 | 肉多荤文高h羞耻校园 | 欧美乱妇15p图 | 欧美z000z猪| 亚洲国产日韩制服在线观看 | 无码欧美XXXXX在线观看裸 | gogogo视频在线观看 | 99久久精品免费看国产一区二区 | 恋夜秀场支持安卓版全部视频国产 | 久久久免费观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品