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

詳解C++構(gòu)造函數(shù)

 更新時(shí)間:2021年11月17日 16:37:30   作者:weixin_46369425  
這篇文章主要為大家介紹了C++構(gòu)造函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1.作用

一種特殊類型的方法,在每次實(shí)例化對(duì)象時(shí)運(yùn)行

2.代碼舉例

2.1 示例1:

#include <iostream>
class A
{
    public:
        float a, b;
        void print()
        {
            std::cout << a <<  " ,  " << b << std :: endl;
        }
};
int main()
{
    A a;
    a.print();
    return 1;
}

運(yùn)行結(jié)果:

image-20211116163007112

當(dāng)我們實(shí)例化A,系統(tǒng)為它分配內(nèi)存,我們沒(méi)有初始化內(nèi)存,得到的是內(nèi)存空間原有的那些東西

2.2 示例2:

當(dāng)在main中添加 std::cout << a.a << " , " << a.b << std :: endl;

int main()
{
    A a;
    std::cout << a.a <<  " ,  " << a.b << std :: endl;
    a.print();
    return 1;
}

(ubuntu下 vs code )運(yùn)行結(jié)果

image-20211116164058741

不同編譯器可能不一樣,有的會(huì)編譯不過(guò)報(bào)錯(cuò)(未初始化局部變量),原因有待深入…

3. 使用

3.1 使用構(gòu)造函數(shù)初始化

#include <iostream>
class A
{
    public:
        float a, b;
        A ()
        {
            a = 0.0f;
            b = 0.0f;
        }
        void print()
        {
            std::cout << a <<  " ,  " << b << std :: endl;
        }
};
int main()
{
    A a;
    std::cout << a.a <<  " ,  " << a.b << std :: endl;
    a.print();
    return 1;
}

結(jié)果:

image-20211116164932213

3.2 有參數(shù)的構(gòu)造函數(shù)

#include <iostream>
class A
{
    public:
        float a, b;
    // 無(wú)參構(gòu)造
    A ()
        {
            a = 0.0f;
            b = 0.0f;
        }
    // 有參構(gòu)造
        A(float c,float d)
        {
            a = c;
            b = d;
        }
    
        void print()
        {
            std::cout << a <<  " ,  " << b << std :: endl;
        }
};
int main()
{
    A a(5.0,6.0);
    std::cout << a.a <<  " ,  " << a.b << std :: endl;
    a.print();
    return 1;
}

一個(gè)類可以有很多構(gòu)造函數(shù) 前提是參數(shù)個(gè)數(shù)不同或者參數(shù)類型不同

類似于同名函數(shù)(函數(shù)重載 即有相同的函數(shù)名,但是有不同的參數(shù)個(gè)數(shù)與參數(shù)類型)

 A(float c,float d)
 {
 }
A(int c,int d)
{
}
A(float c,float d,float e)
{
}

這里需要注意有參構(gòu)造的時(shí)候注意傳值類型

float 類型

A a(5.0f , 6.0f);

3.3 默認(rèn)的構(gòu)造函數(shù)

每個(gè)類默認(rèn)有一個(gè)空參空實(shí)體的構(gòu)造函數(shù)(如果寫(xiě)了構(gòu)造函數(shù),則默認(rèn)構(gòu)造函數(shù)就沒(méi)有了,需要時(shí)需手動(dòng)添加)

A ()
{
}

如果不想使用構(gòu)造函數(shù)有兩種方法

// 1 私有化
private :
	A(){}
// 2 刪掉
A() = delete;

4. 成員初始化列表

例1:正常初始化

#include <iostream>
using namespace std;
class Student
{
private:
    const char *m_name;
    int m_age;
    float m_score;
public:
    // 無(wú)參構(gòu)造 給變量賦定值
    Student()
    {
        m_name = "aaa";
        m_age = 1;
        m_score = 99.0;
    }
    // 有參構(gòu)造  給變量動(dòng)態(tài)賦值
    Student(const char *name, int age, float score)
    {
        m_name = name;
        m_age = age;
        m_score = score;
    }
    void print ()
    {
        cout << m_name << " ," << m_age  <<  " ," <<  m_score << endl;
    }
};
int main(int argc, char const *argv[])
{
    Student s1;
    s1.print();
    Student s2("ccc" , 2 , 99.3f);
    s2.print();
    return 0;
}

例2:成員初始化列表

#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
    // string m_name;
    // char *m_name;
    const char *m_name;
    int m_age;
    float m_score;
public:   
    //  無(wú)參 成員初始化列表  
    Student() 
        : m_name("bbb") , m_age(2) , m_score(93.0f) 
    {
        // TODO
    }
    // 有參 成員初始化列表  
    /**
     *  const char *name    常量指針     const 修飾*name   *name不可改變
     *  char * const name   指針常量     const 修飾 name   name不可改變
     *  char const *name    常量指針 等同于 const char *name 
     * 
     *  這里不寫(xiě)const 會(huì)報(bào)警告  但可以編過(guò)  
     *  
    */
    Student(const char *name, int age, float score)
        : m_name(name) , m_age(age) , m_score(score)
    {
       // TODO
    }
    void print ()
    {
        cout << m_name << " ," << m_age  <<  " ," <<  m_score << endl;
    }
};
int main(int argc, char const *argv[])
{
    Student s1;
    s1.print();
    Student s2("ccc",2,99.3f);
    s2.print();
    return 0;
}

運(yùn)行結(jié)果都一樣:

aaa ,1 ,99
ccc ,2 ,99.3

使用構(gòu)造函數(shù)初始化列表并沒(méi)有效率上的優(yōu)勢(shì),僅僅是書(shū)寫(xiě)方便,尤其是成員變量較多時(shí),這種寫(xiě)法非常簡(jiǎn)單明了。

初始化列表可以用于全部成員變量,也可以只用于部分成員變量

Student(char *name, int age, float score): m_name(name){
    m_age = age;
    m_score = score;
}

NOTE:成員變量的初始化順序與初始化列表中列出的變量的順序無(wú)關(guān),它只與成員變量在類中聲明的順序有關(guān)。

為啥推薦成員初始化列表的寫(xiě)法?

#include <iostream>
using namespace std;
class Example
{
public:
    Example()
    {
        cout<< "Create Example" << endl;
    }
    Example(int x)
    {
        cout<< "Create Example with "  << x << endl;
    }
};
class A
{
private:
    string m_name;
    // 創(chuàng)建了 Example 的無(wú)參構(gòu)造 對(duì)象
    Example m_Example;
public:
    A()
    {
        m_name = "name";
        // 創(chuàng)建新的有參構(gòu)造對(duì)象覆蓋第一次賦值  
        m_Example = Example(1);
    }
};
int main(int argc, char const *argv[])
{
    A a;
    return 0;
}

結(jié)果:

image-20211117113259509

A的構(gòu)造函數(shù)換成成員初始化列表的寫(xiě)法

//    A() : m_name ("name"),m_Example(Example(1))  		與下面寫(xiě)法相同
A() : m_name ("name"),m_Example(1)
    {
    }

結(jié)果:

image-20211117113805527

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲

    C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)飛機(jī)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 一文詳解C++的訪問(wèn)說(shuō)明符

    一文詳解C++的訪問(wèn)說(shuō)明符

    訪問(wèn)說(shuō)明符是 C++ 中控制類成員(屬性和方法)可訪問(wèn)性的關(guān)鍵字,它們用于封裝類數(shù)據(jù)并保護(hù)其免受意外修改或?yàn)E用,本文將給大家詳細(xì)的介紹一下C++的訪問(wèn)說(shuō)明符,感興趣的朋友可以參考下
    2024-04-04
  • C++基于Boost庫(kù)實(shí)現(xiàn)命令行解析

    C++基于Boost庫(kù)實(shí)現(xiàn)命令行解析

    Boost庫(kù)中默認(rèn)自帶了一個(gè)功能強(qiáng)大的命令行參數(shù)解析器,以往我都是自己實(shí)現(xiàn)參數(shù)解析的,今天偶爾發(fā)現(xiàn)這個(gè)好東西,就來(lái)總結(jié)一下參數(shù)解析的基本用法,該庫(kù)需要引入program_options.hpp頭文件,即可使用了
    2021-06-06
  • C++ operator關(guān)鍵字(重載操作符)的用法詳解

    C++ operator關(guān)鍵字(重載操作符)的用法詳解

    下面小編就為大家?guī)?lái)一篇C++ operator關(guān)鍵字(重載操作符)的用法詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C語(yǔ)言之棧和堆(Stack && Heap)的優(yōu)缺點(diǎn)及其使用區(qū)別

    C語(yǔ)言之棧和堆(Stack && Heap)的優(yōu)缺點(diǎn)及其使用區(qū)別

    本篇文章主要介紹了什么是棧(Stack) 、什么是堆( Heap),以及棧和堆的優(yōu)缺點(diǎn),同時(shí)介紹了應(yīng)該什么時(shí)候使用堆和棧,有需要的朋友可以參考下
    2015-07-07
  • C++ Qt繪制時(shí)鐘界面

    C++ Qt繪制時(shí)鐘界面

    大家好,本篇文章主要講的是C++ Qt繪制時(shí)鐘界面,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    這篇文章主要介紹了vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo),下面介紹了一個(gè)示例,將參數(shù)first_arg, second-arg和third arg傳遞給程序(此處需要注意,third arg中間雖然存在空格,但是仍然被視作一個(gè)參數(shù)),需要的朋友參考下吧
    2024-03-03
  • 通過(guò)先序遍歷和中序遍歷后的序列還原二叉樹(shù)(實(shí)現(xiàn)方法)

    通過(guò)先序遍歷和中序遍歷后的序列還原二叉樹(shù)(實(shí)現(xiàn)方法)

    下面小編就為大家?guī)?lái)一篇通過(guò)先序遍歷和中序遍歷后的序列還原二叉樹(shù)(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波

    Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法

    這篇文章主要介紹了C++中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論

道孚县| 九龙县| 诸城市| 天全县| 黄山市| 密云县| 依兰县| 海原县| 南江县| 通渭县| 怀宁县| 开化县| 东乡族自治县| 嘉鱼县| 洪洞县| 平顶山市| 汕头市| 积石山| 株洲市| 中超| 枣庄市| 余姚市| 铜梁县| 蓬安县| 莎车县| 南开区| 延长县| 湟源县| 双柏县| 独山县| 澜沧| 高尔夫| 恭城| 清原| 航空| 海南省| 云梦县| 济宁市| 剑川县| 通化县| 金堂县|