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

C++中類的構(gòu)造函數(shù)初始值列表解讀

 更新時間:2022年11月24日 11:13:18   作者:棉猴  
這篇文章主要介紹了C++中類的構(gòu)造函數(shù)初始值列表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C++類的構(gòu)造函數(shù)初始值列表

1 通過構(gòu)造函數(shù)初始值列表來初始化成員變量

C++中類的構(gòu)造函數(shù)初始值列表可以對類的成員進行初始化。

class myClass{
? public:
? int i;
? myClass(): i(1)
? {
? }
};

其中,類myClass的構(gòu)造函數(shù)中包含了初始值列表,對成員變量i進行初始化。

2 通過構(gòu)造函數(shù)的函數(shù)體來初始化成員變量

除了通過構(gòu)造函數(shù)初始值列表來初始化成員變量外,還可以通過構(gòu)造函數(shù)的函數(shù)體來初始化成員變量。

class myClass{
? public:
? int i;
? myClass()
? {
? ? i = 1;
? }
};

此時,成員變量i的初始值是1。

3 類包含常量或引用成員變量

當類包含有常量成員變量或者引用成員變量時

class myClass{
public:
? int i;
? const int ci;
? int& ri;
};

如果類沒有定義構(gòu)造函數(shù),則使用默認的構(gòu)造函數(shù)來創(chuàng)建對象

myClass mc;

此時,編譯器會報錯,報錯信息為“error C2280: “myClass::myClass(void)”: 嘗試引用已刪除的函數(shù)”。因此,需要編寫myClass類的構(gòu)造函數(shù)對常量成員變量和引用成員變量進行初始化。

3.1 不能在構(gòu)造函數(shù)的函數(shù)體來初始化常量或引用成員變量

在myClass類的構(gòu)造函數(shù)體內(nèi)對常量或引用成員變量進行初始化

myClass()
{
? i = 1;
? ci = 2;
? ri = i;
}

此時,編譯器會報錯,報錯信息為“ error C2789: “myClass::ci”: 必須初始化常量限定類型的對象”。

3.2 在類的構(gòu)造函數(shù)初始值列表來初始化常量或引用成員變量

myClass():i(1),ci(2),ri(i)
{
}

此時,程序可以成功編譯。

C++類的構(gòu)造函數(shù)的作用

構(gòu)造函數(shù)的作用

為了解決給對象成員初始化賦值的問題,C++提供了“構(gòu)造函數(shù)(constructor)”來處理對象的初始化。構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他成員函數(shù)不同,不需要用戶來調(diào)用它,而是在建立對象時自動執(zhí)行。

構(gòu)造函數(shù)的名字必須與類名同名,而不能由用戶任意命名,以便編譯系統(tǒng)能識別它并把它作為構(gòu)造函數(shù)處理。構(gòu)造函數(shù)不返回任何值,所以,函數(shù)沒有返回類型。

例如,定義一個C++類,類名是 student,如下:

class student?????? //以class開頭

{?? ... };

那么,構(gòu)造函數(shù)的函數(shù)名與類名相同,所以,構(gòu)造函數(shù)的函數(shù)名是student,例如:

student();????????????????????? //沒有參數(shù)的構(gòu)造構(gòu)造函數(shù);

student(char* name);???? //帶參數(shù)的構(gòu)造函數(shù);

構(gòu)造函數(shù)的功能是由用戶定義的,用戶根據(jù)初始化的要求設(shè)計函數(shù)體和函數(shù)參數(shù)。

在講解構(gòu)造函數(shù)之前,我們先寫一個例子,測試構(gòu)造函數(shù)的使用。

測試代碼如下:

程序的運行結(jié)果有:

在類student中定義了構(gòu)造函數(shù):

student(char* pn, char* pa, long long n);

構(gòu)造函數(shù)的名稱和所在的類同名。在建立對象時自動執(zhí)行構(gòu)造函數(shù),它的作用是對定義的對象進行初始化。例如給成員變量賦初值,賦值語句是寫在構(gòu)造函數(shù)的函數(shù)體中,只有在調(diào)用構(gòu)造函數(shù)的時候,才執(zhí)行這些賦值語句,為當前對象的成員變量賦值。

在上面的例子中,我們定義了stud對象,在定義對象的同時,給對象的成員變量賦值。

定義對象如下:

student stud("wkf", "www.mylinux.vip", 13926572996);

此時,定義stud對象,給對象設(shè)置3個數(shù)據(jù),根據(jù)這些數(shù)據(jù)的類型,就調(diào)用對應的構(gòu)造函數(shù):

student(char* pn, char* pa, long long n);

所以,把參數(shù)設(shè)置到對應的構(gòu)造函數(shù)中,如下:

pn = "wkf";

pa = "www.mylinux.vip";

n = 13926572996;

給構(gòu)造函數(shù)的參數(shù)設(shè)置數(shù)據(jù)之后,就執(zhí)行構(gòu)造函數(shù)。

上面是在類內(nèi)定義構(gòu)造函數(shù),也可以只在類內(nèi)對構(gòu)造函數(shù)進行聲明,而在類外定義構(gòu)造函數(shù)。在類外定義構(gòu)造函數(shù),如下:

可以看到,把student(char* pn, char* pa, long long n);構(gòu)造函數(shù)放在類外定義。

有關(guān)構(gòu)造函數(shù)的使用,有以下說明:

(1) 構(gòu)造函數(shù)的名稱,與類名一樣。

(2) 什么時候調(diào)用構(gòu)造函數(shù)?定義類對象的時候,開始構(gòu)建對象,調(diào)用類的構(gòu)造函數(shù)。

(3) 構(gòu)造函數(shù)沒有返回值,因此,也不需要在定義構(gòu)造函數(shù)時聲明函數(shù)返回類型,這是它和一般函數(shù)的一個重要的不同之點,不能寫成:

void student ()

{.....}

構(gòu)造函數(shù)的作用主要是用來對對象進行初始化。

(4) 構(gòu)造函數(shù)是建立對象時由系統(tǒng)自動執(zhí)行的,而且只執(zhí)行一次。所以,構(gòu)造函數(shù)不能夠由用戶調(diào)用。

(5) 在構(gòu)造函數(shù)的函數(shù)體中不僅可以對成員變量賦初值,而且,可以包含其他語句,例如cout語句。但是,一般不提倡在構(gòu)造函數(shù)中加入與初始化無關(guān)的內(nèi)容。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++動態(tài)加載so/dll庫的實現(xiàn)

    C++動態(tài)加載so/dll庫的實現(xiàn)

    本文主要介紹了C++動態(tài)加載so/dll庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C++中的對象指針總結(jié)

    C++中的對象指針總結(jié)

    以下是對C++中的對象指針進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C語言實現(xiàn)簡單的抽獎系統(tǒng)

    C語言實現(xiàn)簡單的抽獎系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的抽獎系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • C++使用初始化列表的方式來初始化字段的方法

    C++使用初始化列表的方式來初始化字段的方法

    今天小編就為大家分享一篇關(guān)于C++使用初始化列表的方式來初始化字段的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 將Deepseek接入本地Vscode的圖文步驟

    將Deepseek接入本地Vscode的圖文步驟

    本文主要介紹了將Deepseek接入本地Vscode的圖文步驟,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • C++  線程(串行 并行 同步 異步)詳解

    C++ 線程(串行 并行 同步 異步)詳解

    這篇文章主要介紹了C++ 線程(串行 并行 同步 異步)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • win10環(huán)境下C++ vs2015編譯opencv249的教程

    win10環(huán)境下C++ vs2015編譯opencv249的教程

    這篇文章主要介紹了win10環(huán)境下C++ vs2015編譯opencv249的教程,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Qt實現(xiàn)TCP同步與異步讀寫消息的示例代碼

    Qt實現(xiàn)TCP同步與異步讀寫消息的示例代碼

    這篇文章主要為大家詳細介紹了如何在?Qt?中實現(xiàn)?TCP?客戶端和服務器的同步和異步讀寫消息,有需要的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • C++類和對象深入探索之分文件編寫點和圓的關(guān)系詳解

    C++類和對象深入探索之分文件編寫點和圓的關(guān)系詳解

    先前把C++類和對象的封裝講完了,并且留下了一個判斷兩個立方體是否相等的案例,但是那么多知識點,僅僅一個案例是不夠的,所以再來一個分文件編寫點圓關(guān)系的案例;創(chuàng)建圓類和點類,圓類包含點類,算是一個嵌套吧,順便復習一下分文件編寫的方法,開整
    2022-05-05
  • QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟

    QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟

    本文主要介紹了QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

临泽县| 鹰潭市| 邹城市| 阿勒泰市| 兴义市| 余干县| 安乡县| 清镇市| 淮南市| 高碑店市| 巴青县| 巴青县| 深圳市| 九寨沟县| 综艺| 灵丘县| 连江县| 邯郸县| 剑河县| 舞阳县| 松阳县| 通江县| 温州市| 景谷| 禹州市| 桦甸市| 临西县| 昭通市| 甘德县| 曲松县| 和平县| 辽宁省| 荔浦县| 吉首市| 昌图县| 班玛县| 平果县| 无棣县| 精河县| 昂仁县| 衡东县|