国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

C++之初始化列表學習的總結(jié)

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-24 17:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

一、引出列表的使用:

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

#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++#

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

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

return a;

};
int main()

Test t;
printf("the t.a(chǎn) 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;

通過編譯我們發(fā)現(xiàn)他報了一個錯誤,說成員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(chǎn) is %d",t.getA());
return 0;

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

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關(guān)鍵字修飾的成員還不一樣,上面說a還是要初始化,也就是我們在構(gòu)造函數(shù)體里面對a進行進行初始賦值是行不通的哦,那該如何解決解決這個問題呢?答案來了,就是我們的初始化列表。

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

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

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


從上面我們可以發(fā)現(xiàn),初始化列表就是在構(gòu)造函數(shù)名稱后面且在構(gòu)造函數(shù)體之間。同時這里我們也要注意初始化列表的使用原則:

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

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

(3)初始化列表優(yōu)先于構(gòu)造函數(shù)的函數(shù)體執(zhí)行。

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

#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(chǎn) 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(chǎn) is 666

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

#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

從上面的輸出結(jié)果我們可以初始化的順序與成員的聲明順序有關(guān),同時他也先于構(gòu)造函數(shù)體的執(zhí)行。

三、類中的const成員:

現(xiàn)在我們來總結(jié)一下在類中使用const關(guān)鍵字來修飾類中的屬性時,這時的屬性有啥特征:

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

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

(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

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

四、總結(jié):

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

(2)初始化列表先于構(gòu)造函數(shù)體執(zhí)行。

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

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

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

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

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

    關(guān)注

    7

    文章

    526

    瀏覽量

    45401
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2123

    瀏覽量

    77110
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    PC強實時運動控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導出ZAR文件進行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?915次閱讀
    PC強實時運動控制(一):<b class='flag-5'>C</b>#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    國民技術(shù)發(fā)布N32Cube芯片配置與初始化代碼生成工具

    1月30日,國民技術(shù)(NSING)正式發(fā)布N32Cube——芯片配置與初始化代碼生成工具,讓時鐘、引腳與外設(shè)的配置一目了然、輕松上手!
    的頭像 發(fā)表于 02-02 15:26 ?539次閱讀
    國民技術(shù)發(fā)布N32Cube芯片配置與<b class='flag-5'>初始化</b>代碼生成工具

    MCU工程初始化,到底該不該交給工具?

    背景 工程初始化重復性高,但出錯成本大。工程師常問:交給工具是不是會丟失掌控? 工具可做的事 時鐘樹、引腳復用、外設(shè)配置 工程生成、代碼模板套用 參數(shù)校驗和約束檢查 工程師仍需做的事 特殊業(yè)務邏輯
    的頭像 發(fā)表于 01-29 10:18 ?140次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應用于工業(yè)自動領(lǐng)域。其初始化過程是確保系統(tǒng)穩(wěn)定運行
    的頭像 發(fā)表于 12-22 10:10 ?575次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    瀚海微SD NAND TF卡硬件識別與初始化類問題探討

    在瀚海微SD NAND/TF卡的實際應用中,硬件識別與初始化是保障設(shè)備正常運行的首要環(huán)節(jié),該環(huán)節(jié)出現(xiàn)故障會直接導致存儲卡無法投入使用,尤其在工業(yè)控制、車載設(shè)備等關(guān)鍵場景中,可能引發(fā)設(shè)備停機、數(shù)據(jù)丟失
    的頭像 發(fā)表于 11-18 09:58 ?515次閱讀
    瀚海微SD NAND  TF卡硬件識別與<b class='flag-5'>初始化</b>類問題探討

    串口通信基石:Air8000下Modbus RTU串口初始化詳解!

    串口初始化是Modbus RTU通信穩(wěn)定可靠的關(guān)鍵起點。本篇深入剖析Air8000開發(fā)板串口參數(shù)配置、初始化代碼實現(xiàn)及調(diào)試要點,結(jié)合master_rtu示例,分享實際操作中的經(jīng)驗與避坑指南,讓您
    的頭像 發(fā)表于 10-28 16:33 ?1653次閱讀
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

    NVMe高速傳輸之擺脫XDMA設(shè)計33:初始化功能驗證與分析

    本文主要交流NVMe設(shè)計思路,在本博客已給出相關(guān)博文五十多篇,希望對初學者有一定作用 初始化功能主要實現(xiàn) PCIe 鏈路設(shè)備的初始化配置和 NVMe 初始化配置。 復雜的PCIe 事務交互與設(shè)備行為
    發(fā)表于 10-08 08:02

    GraniStudio:IO初始化以及IO資源配置例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入IO初始化以及IO資源配置例程,點擊導入按鈕。 打開IO初始化以及IO資源配置例程所在路徑,選中IO初始化以及
    的頭像 發(fā)表于 08-22 17:34 ?933次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    1.文件運行 導入工程 雙擊運行桌面GraniStudio.exe。 通過引導界面導入初始化例程,點擊導入按鈕。 打開初始化例程所在路徑,選中初始化.gsp文件,點擊打開,完成導入。 2.功能
    的頭像 發(fā)表于 08-22 16:45 ?891次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    MCU外設(shè)初始化:為什么參數(shù)配置必須優(yōu)先于使能

    在微控制器領(lǐng)域,初始化參數(shù)配置階段至關(guān)重要。此時,雖無電源驅(qū)動,但微控制器在使能信號到來前,借初始化參數(shù)配置這一精細步驟,開啟關(guān)鍵準備進程。初始化參數(shù)配置如同物理坐標錨定、邏輯指令部署、內(nèi)在秩序預設(shè)
    的頭像 發(fā)表于 08-13 10:38 ?788次閱讀

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)體類型的變量可以包含IOPORT的相關(guān)
    的頭像 發(fā)表于 07-16 16:26 ?1407次閱讀

    NVMe高速傳輸之擺脫XDMA設(shè)計之七:系統(tǒng)初始化

    直接采用PCIe實現(xiàn)NVMe功能,它的系統(tǒng)初始化流程主要分為鏈路訓練、PCIe 初始化和 NVMe 初始化, 分別實現(xiàn) PCIe鏈路連接、 PCIe 設(shè)備枚舉配置和 NVMe 設(shè)備配置功能。 其中鏈
    發(fā)表于 07-04 09:14

    IM系列設(shè)備過載故障:界面初始化終止的診斷流程與修復指南

    當 IM 系列設(shè)備出現(xiàn)過載故障導致界面初始化終止時,通常表現(xiàn)為設(shè)備啟動后操作界面無顯示、指示燈異常閃爍或初始化進度條停滯不前,同時可能伴隨設(shè)備運行異響或異常發(fā)熱。初步判斷時,可觀察設(shè)備是否有錯
    的頭像 發(fā)表于 06-28 09:47 ?1207次閱讀

    IM 系列設(shè)備過載保護機制下界面初始化中斷的底層邏輯與解決方案

    一、過載保護機制與界面初始化的關(guān)聯(lián)基礎(chǔ) IM 系列設(shè)備的過載保護機制是保障設(shè)備安全運行的核心功能,其通過傳感器實時采集設(shè)備運行參數(shù),如電流、電壓、溫度、系統(tǒng)資源占用率等。一旦這些參數(shù)超出預設(shè)閾值
    的頭像 發(fā)表于 06-27 09:58 ?540次閱讀

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

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