第三天之C 物件導向模型初探(this指標)

2021-09-29 11:36:03 字數 1633 閱讀 8898

c++物件模型可以概括為以下2部分:

語言中直接支援物件導向程式設計的部分,主要涉及如建構函式、析構函式、虛函式、繼承(單繼承、多繼承、虛繼承)、多型等等。

對於各種支援的底層實現機制。

在c語言中,「資料」和「處理資料的操作(函式)」是分開來宣告的,也就是說,語言本身並沒有支援「資料和函式」之間的關聯性。在c++中,通過抽象資料型別(abstract data type,adt),在類中定義資料和函式,來實現資料和函式直接的繫結。

概括來說,在c++類中有兩種成員資料:static、nonstatic;三種成員函式:static、nonstatic、virtual。

c++中的class從物件導向理論出發,將變數(屬性)和函式(方法)集中定義在一起,用於描述現實世界中的類。從計算機的角度,程式依然由資料段和**段構成。

c++編譯器如何完成物件導向理論到電腦程式的轉化?

換句話:c++編譯器是如何管理類、物件、類和物件之間的關係

具體的說:具體物件呼叫類中的方法,那,c++編譯器是如何區分,是那個具體的類,呼叫這個方法那?

//思考下面**的執行結果

#include "iostream"

using namespace std;

class c1

; //12

class c2

//4void setk(int val) //4

protected:

private:

}; //24 16 12(鐵釘的不對)

通過上面的案例,我們可以的得出:

1)c++類物件中的成員變數和成員函式是分開儲存的

成員變數:

普通成員變數:儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式

靜態成員變數:儲存於全域性資料區中

成員函式:儲存於**段中。

問題出來了:很多物件共用一塊**?**是如何區分具體物件的那?

換句話說:int getk() const ,**是如何區分,具體obj1、obj2、obj3物件的k值?

2)c++編譯器對普通成員函式的內部處理

1、c++類物件中的成員變數和成員函式是分開儲存的。c語言中的記憶體四區模型仍然有效!

2、c++中類的普通成員函式都隱式包含乙個指向當前物件的this指標。

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

靜態成員函式與普通成員函式的區別:

靜態成員函式不包含指向具體物件的指標

普通成員函式包含乙個指向具體物件的指標

js物件導向第三天

函式也是物件 函式也是通過類來建立的,通過function來建立函式物件 函式是比較特殊的物件,函式的宣告是引用資料型別,通過function類建立乙個函式 new function 可以建立出來的乙個匿名物件 通過function類建立物件 函式是物件,物件是屬性的無序集合 常用的屬性 argum...

C 物件導向模型初探

前言 c 物件模型可以概括為以下2部分 1.語言中直接支援物件導向程式設計的部分,主要涉及如建構函式 析構函式 虛函式 繼承 單繼承 多繼承 虛繼承 多型等等。2.對於各種支援的底層實現機制。在c語言中,資料 和 處理資料的操作 函式 是分開來宣告的,也就是說,語言本身並沒有支援 資料和函式 之間的...

CSS第三天之盒子模型

網頁布局過程 先準備好相關的網頁元素,網頁元素基本上都是盒子 利用css設定好盒子的樣式,並且將盒子擺放在合適的位置。往盒子裡面裝內容 網頁布局的核心 利用css擺盒子。border可以設定盒子得邊框,邊框有三個屬性 粗細,樣式,顏色 屬性作用 border width 設定邊框的寬度 border...