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指標,普通的成員函式包含一個指向具體物件的指標。
相關文章
- C++ 物件導向 一C++物件
- python-程式導向、物件導向、類Python物件
- Java物件導向——類與物件Java物件
- JAVA物件導向--抽象類Java物件抽象
- python物件導向思想(類與物件)Python物件
- 物件導向程式設計C++物件程式設計C++
- C++物件導向三大特性C++物件
- C++物件導向-類和物件那些你不知道的細節原理C++物件
- 物件導向 -- 類的組合物件
- PHP 物件導向 (十一)反射類PHP物件反射
- 物件導向之內部類物件
- 物件導向-物件導向思想物件
- Java語言之物件導向—類與物件(上)Java物件
- C++ 物件導向高階設計C++物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- PHP 物件導向 (二)類屬性PHP物件
- 物件導向的基本理論1:類和物件物件
- C++物件導向五子棋C++物件
- PHP中物件導向的分頁類PHP物件
- python中物件導向_類_物件的概念與定義Python物件
- 課時37:類與物件:物件導向程式設計物件程式設計
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- “程序導向”和“物件導向”物件
- Python - 物件導向程式設計 - 什麼是 Python 類、類物件、例項物件Python物件程式設計
- 物件導向物件
- C++模組2:物件導向程式設計C++物件程式設計
- C++物件導向程式設計_Part1C++物件程式設計
- 物件導向程式設計(C++篇4)——RAII物件程式設計C++AI
- 物件導向,搞定物件物件
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- 【python】物件導向之類成員(屬性)Python物件
- Python如何設計物件導向的類(下)Python物件
- Python如何設計物件導向的類(上)Python物件
- 談談我對物件導向以及類與物件的理解物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- 物件導向中類和物件的定義是什麼?物件