技術解答物件導向的初步認知(C++ 類別)

php是最好的语言
發布: 2018-07-23 15:58:40
原創
1496 人瀏覽過

我們應該知道C 有兩個成員資料: static,nostatic; 三種成員函數: static,nostatic,virtual。其實對於普通的成員函數中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 C 編譯器會知道是哪個物件呼叫的類別的成員函數。

C 類別物件中的成員變數和成員函數是一起儲存的嗎?如果不是?

我們應該知道C 有兩個成員資料: static,nostatic; 三種成員函數: static,nostatic,virtual。
下面看這個案例:

class A
{    int a;    int b;
};class B
{    int a;    int b;    static int c;
};class C
{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}
};int main()
{    //1. 分析A对象占的内存
    A a;    cout << sizeof(a) << endl;  //结果是8

    //2. 分析B对象占的内存
    B b;    cout << sizeof(b) << endl;  //结果是8

    //3. 分析C对象占的内存
    C c;    cout << sizeof(c) << endl;  //结果是8

    return 0;
}
登入後複製
登入後複製

其實根據輸出結果,我們得到以下的結論:
a. 成員變數:

  • 普通的成員變數儲存在物件中,與strutc變數具有相同的記憶體佈局和位元組對齊方式;

  • #靜態的成員變數儲存於全域資料區中

b. 成員函數儲存在程式碼段中。


C 編譯器如何管理類別和物件,具體的說就是物件呼叫類別中的方法,C 編譯器是如何區分哪個具體的物件呼叫哪個成員方法的?

技術解答物件導向的初步認知(C++ 類別)
其實對於普通的成員函數(不是靜態的成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 C 編譯器會知道是哪個物件呼叫的類別的成員函數。


我們總結一下:  
a. C 類別物件中的成員變數和成員函數時分開儲存的;
b. C 類別的普通成員函數(包括建構子,但是不包括靜態的成員函數)中都包含一個指向當前物件的this指標;
c. 靜態成員函數與靜態成員變數屬於類別;
d. 靜態成員函數與普通成員函數的差異:
   靜態成員函數不包含指向特定物件的this指標,普通的成員函數包含一個指向特定物件的指標。

文章概述

我們需要解決這幾個問題:
a. C 類別物件中的成員變數和成員函數是一起儲存的嗎?如果不是?
b. C 編譯器如何管理類別和物件,具體的說就是物件呼叫類別中的方法,C 編譯器是如何區分哪個特定的物件呼叫哪個成員方法的?


C 類別物件中的成員變數和成員函數是一起儲存的嗎?如果不是?

我們應該知道C 有兩個成員資料: static,nostatic; 三種成員函數: static,nostatic,virtual。
下面看這個案例:

class A
{    int a;    int b;
};class B
{    int a;    int b;    static int c;
};class C
{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}
};int main()
{    //1. 分析A对象占的内存
    A a;    cout << sizeof(a) << endl;  //结果是8

    //2. 分析B对象占的内存
    B b;    cout << sizeof(b) << endl;  //结果是8

    //3. 分析C对象占的内存
    C c;    cout << sizeof(c) << endl;  //结果是8

    return 0;
}
登入後複製
登入後複製

其實根據輸出結果,我們得到以下的結論:
a. 成員變數:

  • 普通的成員變數儲存在物件中,與strutc變數具有相同的記憶體佈局和位元組對齊方式;

  • #靜態的成員變數儲存於全域資料區中

b. 成員函數儲存在程式碼段中。


C 編譯器如何管理類別和物件,具體的說就是物件呼叫類別中的方法,C 編譯器是如何區分哪個具體的物件呼叫哪個成員方法的?

技術解答物件導向的初步認知(C++ 類別)
其實對於普通的成員函數(不是靜態的成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 C 編譯器會知道是哪個物件呼叫的類別的成員函數。


我們總結一下:  
a. C 類別物件中的成員變數和成員函數是分開儲存的;
b. C 類別的普通成員函數(包括建構子,但是不包括靜態的成員函數)中都包含一個指向當前物件的this指標;
c. 靜態成員函數與靜態成員變數屬於類別;
d. 靜態成員函數與普通成員函數的差異:
   靜態成員函數不包含指向特定物件的this指標,普通的成員函數包含一個指向特定物件的指標。

相關推薦:

Php物件導向 抽象類別

#PHP物件導向程式設計詳解:類別與物件_PHP教學

#

以上是技術解答物件導向的初步認知(C++ 類別)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板