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

來源:互聯網
上載者:User

我們應該知道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++編譯器是如何區分哪個具體的對象調用哪個成員方法的?


其實對於普通的成員函數(不是靜態成員函數)中, 參數中都有一個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++編譯器是如何區分哪個具體的對象調用哪個成員方法的?


其實對於普通的成員函數(不是靜態成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是對象自己,通過this指標。C++編譯器會知道是哪個對象調用的類的成員函數。

我們總結一下:
a. C++類對象中的成員變數和成員函數是分開儲存的;
b. C++類的普通成員函數(包括建構函式,但是不包括靜態成員函數)中都包含一個指向當前對象的this指標;
c. 靜態成員函數和靜態成員變數屬於類;
d. 靜態成員函數和普通成員函數的區別:
靜態成員函數不包含指向具體對象的this指標,普通的成員函數包含一個指向具體對象的指標。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.