我們應該知道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. 成員變數:
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. 成員變數:
b. 成員函數儲存在程式碼片段中。
C++編譯器如何管理類和對象,具體的說就是對象調用類中的方法,C++編譯器是如何區分哪個具體的對象調用哪個成員方法的?
其實對於普通的成員函數(不是靜態成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是對象自己,通過this指標。C++編譯器會知道是哪個對象調用的類的成員函數。
我們總結一下:
a. C++類對象中的成員變數和成員函數是分開儲存的;
b. C++類的普通成員函數(包括建構函式,但是不包括靜態成員函數)中都包含一個指向當前對象的this指標;
c. 靜態成員函數和靜態成員變數屬於類;
d. 靜態成員函數和普通成員函數的區別:
靜態成員函數不包含指向具體對象的this指標,普通的成員函數包含一個指向具體對象的指標。