c++面向對象模型初探

C++對象模型可以概括爲以下2部分:

1. 語言中直接支持面向對象程序設計的部分,主要涉及如構造函數、析構函數、虛函數、繼承(單繼承、多繼承、虛繼承)、多態等等。

2. 對於各種支持的底層實現機制。

在c語言中,“數據”和“處理數據的操作(函數)”是分開來聲明的,也就是說,語言本身並沒有支持“數據和函數”之間的關聯性。在c++中,通過抽象數據類型(abstractdata type,ADT),在類中定義數據和函數,來實現數據和函數直接的綁定

概括來說,在C++類中有兩種成員數據:static、nonstatic;三種成員函數:static、nonstatic、virtual。


#include "iostream"

using namespace std;

class C1
{
public:
	int i;  //4
	int j; //4
	int k;  //4
protected:
private:
}; //12

class C2
{
public:
	int i; //4 
	int j; //4
	int k; //4

	static int m; //4
public:
	int getK() const { return k; } //4
	void setK(int val) { k = val; }  //4

protected:
private:
}; //12 16 24 

struct S1
{
	int i;
	int j;
	int k;
}; //

struct S2
{
	int i;
	int j;
	int k;
	static int m;
}; //

int main()
{
	printf("c1:%d \n", sizeof(C1));
	printf("c2:%d \n", sizeof(C2));
	printf("s1:%d \n", sizeof(S1));
	printf("s2:%d \n", sizeof(S2));

	system("pause");
}
結果全部都是12

從程序結果可以看出:C++類對象中的成員變量成員函數分開存儲

成員變量:

普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式

靜態成員變量:存儲於全局數據區

成員函數:存儲於代碼段中。

C++中的class從面向對象理論出發,將變量(屬性)和函數(方法)集中定義在一起,用於描述現實世界中的類。從計算機的角度,程序依然由數據段和代碼段構成。

C++編譯器如何完成面向對象理論到計算機程序的轉化?

換句話:C++編譯器是如何管理類、對象、類和對象之間的關係

具體的說:具體對象調用類中的方法,那,c++編譯器是如何區分,是那個具體的類,調用這個方法那?

結論:

1、C++類對象中的成員變量和成員函數是分開存儲的。C語言中的內存四區模型仍然有效!

2C++中類的普通成員函數都隱式包含一個指向當前對象的this指針。

3、靜態成員函數、成員變量屬於類

靜態成員函數與普通成員函數的區別

靜態成員函數不包含指向具體對象的指針

普通成員函數包含一個指向具體對象的指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章