我們應該知道C 有兩個成員資料: static,nostatic; 三種成員函數: static,nostatic,virtual。其實對於普通的成員函數中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 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. 成員函數儲存在程式碼段中。
其實對於普通的成員函數(不是靜態的成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 C 編譯器會知道是哪個物件呼叫的類別的成員函數。
我們總結一下:
a. C 類別物件中的成員變數和成員函數時分開儲存的;
b. C 類別的普通成員函數(包括建構子,但是不包括靜態的成員函數)中都包含一個指向當前物件的this指標;
c. 靜態成員函數與靜態成員變數屬於類別;
d. 靜態成員函數與普通成員函數的差異:
靜態成員函數不包含指向特定物件的this指標,普通的成員函數包含一個指向特定物件的指標。
我們需要解決這幾個問題:
a. C 類別物件中的成員變數和成員函數是一起儲存的嗎?如果不是?
b. 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. 成員函數儲存在程式碼段中。
其實對於普通的成員函數(不是靜態的成員函數)中, 參數中都有一個this指標。這個this指標其實指向的是物件自己,透過this指標。 C 編譯器會知道是哪個物件呼叫的類別的成員函數。
我們總結一下:
a. C 類別物件中的成員變數和成員函數是分開儲存的;
b. C 類別的普通成員函數(包括建構子,但是不包括靜態的成員函數)中都包含一個指向當前物件的this指標;
c. 靜態成員函數與靜態成員變數屬於類別;
d. 靜態成員函數與普通成員函數的差異:
靜態成員函數不包含指向特定物件的this指標,普通的成員函數包含一個指向特定物件的指標。
相關推薦:
#以上是技術解答物件導向的初步認知(C++ 類別)的詳細內容。更多資訊請關注PHP中文網其他相關文章!