c 物件模型分析

2022-09-11 17:39:15 字數 732 閱讀 1077

class是一種特殊的struct

在記憶體中class依舊可以看作變數的集合

class與struct遵循相同的記憶體對齊規則

class中的成員函式與成員變數是分開存放的

每個物件有獨立的成員變數

所有物件共享類中的成員函式

執行時的物件退化為結構體的形式

所有成員變數在記憶體中依次排布

成員變數間可能存在記憶體空隙

可以通過記憶體位址直接訪問成員變數

訪問許可權關鍵字在執行時失效

類中的成員函式位於**段

呼叫成員函式時物件位址作為引數隱式傳遞

成員函式通過物件位址訪問成員變數

c++語法規則隱藏了物件位址的傳遞過程

c++多型的實現原理

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表

虛函式表是乙個儲存成員函式位址的資料結構

虛函式表是由編譯器自動生成與維護的

virtual成員函式會被編譯器放入虛函式表中

存在虛函式時,每個物件都有乙個指向虛函式表的指標

編譯器確認add()是否為虛函式?

1.yes->編譯器在物件vptr所指向的虛函式表中查詢add()的位址

2.no->編譯器直接可以確定被調成員函式的位址

小結繼承的本質就是父子間成員變數的疊加

c++中的多型是通過虛函式表實現的

虛函式表是由編譯器自動生成與維護的

虛函式的呼叫效率低於普通成員函式

c 物件模型分析(一)

深夜睡不著覺,很痛苦。關於物件 第一部分 1.c 加上封裝之後的成本 a.成員資料 c class中的成員資料等同於c中struct中的資料 c.內聯的成員函式 擁有乙個或零個函式定義的內聯函式會在每個使用者身上產生乙個函式實體 d.virtual function機制 支援乙個有效率的 執行期繫結...

C 物件模型分析(上)

回歸本質 class是一種特殊的struct 成員函式也是函式,只要時函式,編譯之後就是放在 段中的 值得思考的問題class a sizeof a class b sizeof b 物件記憶體布局初探 include include include include using namespace ...

C 物件導向模型分析(1)

前言 在上篇文章中已經討論了c 的靜態成員變數和靜態的成員函式。c 靜態成員變數成員函式。c 物件模型可以概括為以下2部分 語言中直接支援物件導向程式設計的部分,主要涉及如建構函式 析構函式 虛函式 繼承 單繼承 多繼承 虛繼承 多型等等。對於各種支援的底層實現機制。在c語言中,資料 和 處理資料的...