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

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

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

1.作用

一種特殊類型的方法,在每次實例化對象時運行

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

運行結果:

image-20211116163007112

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

2.2 示例2:

當在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 )運行結果

image-20211116164058741

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

3. 使用

3.1 使用構造函數(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;
}

結果:

image-20211116164932213

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

#include <iostream>
class A
{
    public:
        float a, b;
    // 無參構造
    A ()
        {
            a = 0.0f;
            b = 0.0f;
        }
    // 有參構造
        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;
}

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

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

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

這里需要注意有參構造的時候注意傳值類型

float 類型

A a(5.0f , 6.0f);

3.3 默認的構造函數(shù)

每個類默認有一個空參空實體的構造函數(shù)(如果寫了構造函數(shù),則默認構造函數(shù)就沒有了,需要時需手動添加)

A ()
{
}

如果不想使用構造函數(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:
    // 無參構造 給變量賦定值
    Student()
    {
        m_name = "aaa";
        m_age = 1;
        m_score = 99.0;
    }
    // 有參構造  給變量動態(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:   
    //  無參 成員初始化列表  
    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 
     * 
     *  這里不寫const 會報警告  但可以編過  
     *  
    */
    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;
}

運行結果都一樣:

aaa ,1 ,99
ccc ,2 ,99.3

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

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

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

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

為啥推薦成員初始化列表的寫法?

#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 的無參構造 對象
    Example m_Example;
public:
    A()
    {
        m_name = "name";
        // 創(chuàng)建新的有參構造對象覆蓋第一次賦值  
        m_Example = Example(1);
    }
};
int main(int argc, char const *argv[])
{
    A a;
    return 0;
}

結果:

image-20211117113259509

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

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

結果:

image-20211117113805527

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • C語言實現(xiàn)飛機小游戲

    C語言實現(xiàn)飛機小游戲

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

    一文詳解C++的訪問說明符

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

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

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

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

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

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

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

    C++ Qt繪制時鐘界面

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

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

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

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

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

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

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

    C++中綴表達式轉后綴表達式的方法

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

最新評論

澜沧| 盐源县| 西平县| 顺义区| 永兴县| 湘阴县| 融水| 石楼县| 黑水县| 延边| 西吉县| 嘉义市| 阜新| 崇礼县| 清镇市| 桃源县| 明光市| 客服| 阜平县| 萨嘎县| 广南县| 阳新县| 图们市| 万荣县| 奇台县| 青神县| 新泰市| 吴忠市| 蕉岭县| 商都县| 郑州市| 阿克陶县| 巩留县| 阿荣旗| 新干县| 巴林右旗| 张家界市| 奉化市| 海南省| 林西县| 辉南县|