C++ 類(物件導向初探)
文章概述
我們需要解決這幾個問題:
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指標,普通的成員函式包含一個指向具體物件的指標。
相關文章
- 初探 JavaScript 物件導向JavaScript物件
- 物件導向-抽象類物件抽象
- Perl物件導向--類物件
- C++ 物件導向 一C++物件
- Java物件導向——類與物件Java物件
- python-程式導向、物件導向、類Python物件
- 物件導向類成員物件
- JAVA物件導向--抽象類Java物件抽象
- python物件導向思想(類與物件)Python物件
- PHP 物件導向 (十一)反射類PHP物件反射
- 物件導向 -- 類的組合物件
- 物件導向之內部類物件
- JavaScript中的物件導向----類JavaScript物件
- 物件導向——類設計(一)物件
- 物件導向程式設計C++物件程式設計C++
- C++物件導向三大特性C++物件
- 物件導向-物件導向思想物件
- C++物件導向-類和物件那些你不知道的細節原理C++物件
- C++物件導向程式設計 類和物件提高篇 建構函式C++物件程式設計函式
- 【C++】由Polocar 學習 C++物件導向C++物件
- Java語言之物件導向—類與物件(上)Java物件
- PHP 物件導向 (二)類屬性PHP物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- C++ 物件導向高階設計C++物件
- C++與物件導向程式設計C++物件程式設計
- Effective C++:物件導向與繼承C++物件繼承
- 物件導向的基本理論1:類和物件物件
- C++物件導向五子棋C++物件
- C++模組2:物件導向程式設計C++物件程式設計
- PHP中物件導向的分頁類PHP物件
- 物件導向與人類的組織物件
- 程式導向與物件導向物件
- 物件導向與程式導向物件
- “程序導向”和“物件導向”物件
- 課時37:類與物件:物件導向程式設計物件程式設計
- 物件導向物件
- javascript物件導向包裝類Class的類庫解析JavaScript物件
- 物件導向,搞定物件物件