C++ class

來源:互聯網
上載者:User

標籤:c++ class

C++的class和其他的進階語言如C#/Java有些不一樣。這是C++物件導向的核心。

一點一點來: 650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0003.gif" alt="j_0003.gif" />

一 , 建立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沒被初始化之前是沒有空間分配的,當然其所有的成員也是沒有空間的。

650) this.width=650;" title="01.png" src="https://s4.51cto.com/wyfs02/M01/93/00/wKiom1kGvNvigCO0AABTLoiNczo027.png-wh_500x0-wm_3-wmp_4-s_4219424639.png" alt="wKiom1kGvNvigCO0AABTLoiNczo027.png-wh_50" />

②:關於存取修飾詞在C++中有3中 private , protected , public

    1, 在class中預設為private , 在struct中預設為public

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

650) this.width=650;" title="02.png" src="https://s5.51cto.com/wyfs02/M01/93/00/wKiom1kGvqXh6qZYAABJbxy0ars486.png-wh_500x0-wm_3-wmp_4-s_3516390608.png" alt="wKiom1kGvqXh6qZYAABJbxy0ars486.png-wh_50" />

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

   其結果如:

650) this.width=650;" title="03.png" src="https://s4.51cto.com/wyfs02/M01/92/FE/wKioL1kGv-yTUiiWAAAhdy1ofYg039.png-wh_500x0-wm_3-wmp_4-s_1302667787.png" alt="wKioL1kGv-yTUiiWAAAhdy1ofYg039.png-wh_50" />

到目前我們會發現一個很基礎的問題 , 成員的初始化(如果等待調用者自己一個一個用代碼實現初始化的話 ,很有可能會漏掉),當然在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的聲明的順序:

650) this.width=650;" title="04.png" src="https://s5.51cto.com/wyfs02/M01/92/FF/wKioL1kGxVfSe3KXAAAewHrzgKs427.png-wh_500x0-wm_3-wmp_4-s_2910155521.png" alt="wKioL1kGxVfSe3KXAAAewHrzgKs427.png-wh_50" />

和在建構函式中:後面寫的順序無關:

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

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

結果為:

650) this.width=650;" title="05.png" src="https://s1.51cto.com/wyfs02/M00/93/01/wKiom1kGxqDwtiB5AAAjER78PoY087.png-wh_500x0-wm_3-wmp_4-s_183381991.png" alt="wKiom1kGxqDwtiB5AAAjER78PoY087.png-wh_50" />

因為賦值的順序是先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;}

運行結果 :

650) this.width=650;" title="06.png" src="https://s5.51cto.com/wyfs02/M00/93/01/wKiom1kGyNaQxU_6AAAZF40F5lY784.png-wh_500x0-wm_3-wmp_4-s_3099186131.png" alt="wKiom1kGyNaQxU_6AAAZF40F5lY784.png-wh_50" />

當然 , 這種只是示範(實際開發中不這麼搞) 。 實際開發中 , 將聲明寫在都檔案中 , 將實現寫在源檔案中:

定義一個標頭檔:

650) this.width=650;" title="07.png" src="https://s4.51cto.com/wyfs02/M01/93/01/wKiom1kGzYaiMt0zAABQKG2tbZo187.png-wh_500x0-wm_3-wmp_4-s_3148953672.png" alt="wKiom1kGzYaiMt0zAABQKG2tbZo187.png-wh_50" />

實現:

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

結果:

650) this.width=650;" title="08.png" src="https://s5.51cto.com/wyfs02/M01/92/FF/wKioL1kGzc2TvgQHAAAkISJxnWI673.png-wh_500x0-wm_3-wmp_4-s_1568922101.png" alt="wKioL1kGzc2TvgQHAAAkISJxnWI673.png-wh_50" />

本文出自 “Better_Power_Wisdom” 部落格,請務必保留此出處http://aonaufly.blog.51cto.com/3554853/1920946

C++ class

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.