中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ class

發布時間:2020-04-21 18:11:03 來源:網絡 閱讀:486 作者:Aonaufly 欄目:移動開發

C++的class和其他的高級語言如C#/Java有些不一樣。這是C++面向對象的核心。

一點一點來: C++ class

一 , 創建class

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
    int a;
};
int main()
{
    My_First_Class c;
    c.a = 2;
    cout << c.a << endl;
    return 0;
}

重點:

①:創建類 , 需要用關鍵字class。

②:class也是一種數據類型,{}外面需要以;來結束。


注意點:

①:int a 不能被初始化 , 原因:class沒被初始化之前是沒有空間分配的,當然其所有的成員也是沒有空間的。

C++ class

②:關于訪問修飾符在C++中有3中 private , protected , public

    1, 在class中默認為private , 在struct中默認為public

    2, class中,訪問修飾符可以有多個, 其作用范圍為 : 其位置到下一個訪問修飾符的位置(如果沒有下一個訪問修飾符則是到class結束位置既是 “}”),如下圖:

C++ class

③:My_First_Class c; 這種初始化是把My_First_Class類對象c放在了棧區。其實可以將其放入堆去,其方案是利用指針。代碼如下:

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
        int a;
    private:
        int c;
};
int main()
{
    //My_First_Class c;
    //a = 2;
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    return 0;
}

   其結果如下圖:

C++ class

到目前我們會發現一個很基礎的問題 , 成員的初始化(如果等待調用者自己一個一個用代碼實現初始化的話 ,很有可能會漏掉),當然在C#/Java等高級語言中 , 這個就不成問題了。

在C++中,提供了構造函數可以提供初始化的

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
        int a;
    My_First_Class()
    {
        a = 1;
    }
    private:
        int c;
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

注意:

①:構造函數和C#/Java一樣 , name使用class的名稱 , 而且沒有返回值

②:構造函數默認應該放在public之下,不然會報錯。

③:構造函數必須要在需要初始化成員的后面創建,如要初始化a(int) , 必須在int a;的后面創建。


初始化列表:

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
        int a;
    private:
        int c;
    public:
    My_First_Class():a(1),c(2)
    {
    }
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

注意:

①:My_First_Class():a(1),c(2) 賦值的順序是a , c的聲明的順序:

C++ class

和在構造函數中:后面寫的順序無關:

如下面的寫法,就不會得到預期的值:

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
        int a;
        int m;
    My_First_Class():m(2),a(m)
    {
    }
};
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    cout << c.m << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

結果為:

C++ class

因為賦值的順序是先a后m(a在m前進行了聲明)


當然 , 構造函數也可以是有參的和C#/Java一樣 , 這里就不講了


二:類內聲明 , 類外定義

#include <iostream>
using namespace std;
class My_First_Class
{
    public:
        int a;
        int m;
    My_First_Class():m(2),a(1)
    {
    }
    int sum();
};
int My_First_Class::sum()
{
    return a + m;
}
int main()
{
    My_First_Class c;
    int sum = c.sum();
    cout << c.a << endl;
    cout << sum << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

運行結果 :

C++ class

當然 , 這種只是演示(實際開發中不這么搞) 。 實際開發中 , 將聲明寫在都文件中 , 將實現寫在源文件中:

定義一個頭文件:

C++ class

實現:

#include <iostream>
using namespace std;
#include "HeadOne.h"

My_First_Class::My_First_Class()
{
    a = 10;
}
int main()
{
    My_First_Class c;
    cout << c.a << endl;
    /*
    My_First_Class *c = new My_First_Class;
    c->a = 3;
    cout << c->a << endl;
    delete c;
    */
    return 0;
}

結果:

C++ class

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辛集市| 合江县| 岐山县| 鄢陵县| 岳西县| 佛教| 曲水县| 孝感市| 肇州县| 西贡区| 黄石市| 凭祥市| 太原市| 无锡市| 普宁市| 永善县| 沧源| 健康| 昌黎县| 彰化市| 阿拉善右旗| 怀仁县| 东台市| 山东| 阿合奇县| 定西市| 华宁县| 抚州市| 丽水市| 航空| 田东县| 安吉县| 柏乡县| 古浪县| 衡南县| 林甸县| 宜良县| 克什克腾旗| 北京市| 堆龙德庆县| 启东市|