日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++编译器对属性和方法的处理机制

發布時間:2025/3/20 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++编译器对属性和方法的处理机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++中的class從面向對象理論出發,將變量(屬性)和函數(方法)集中定義在一起,用于描寫敘述現實世界中的類。

從計算機的角度。程序依舊由數據段和代碼段構成。

C++編譯器怎樣完畢面向對象理論到計算機程序的轉化?

換句話:C++編譯器是怎樣管理類、對象、類和對象之間的關系

詳細的說:詳細對象調用類中的方法。那,c++編譯器是怎樣區分,是哪個詳細的類,調用這種方法?

demo

#include <iostream>using namespace std;class C1 { public:int i; //4int j; //4int k; //4 protected: private: }; // 大小應該是12class C2 { public:int i; //4 int j; //4int k; //4static int m; //4 public:int getK() const { return k; } //4void setK(int val) { k = val; } //4protected: private: }; //大小可能是12,可能是16。可能是24 struct S1 {int i;int j;int k; }; // 大小是12struct S2 {int i;int j;int k;static int m; }; // 大小可能是12,可能是16int main() {printf("c1:%d \n", sizeof(C1)); // 結果是12printf("c2:%d \n", sizeof(C2)); // 結果是12printf("s1:%d \n", sizeof(S1)); // 結果是12printf("s2:%d \n", sizeof(S2)); // 結果是12}

通過上面的demo。我們能夠的得出:

1)C++類對象中的成員變量和成員函數是分開存儲的

成員變量:

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

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

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


問題出來了:非常多對象共用一塊代碼?代碼是怎樣區分詳細對象的?

換句話說:int getK() const { return k; },代碼是怎樣區分,詳細obj1、obj2、obj3對象的k

看下圖



對于普通成員函數。C++編譯器做了一層封裝。比方Test類的構造函數。當中盡管僅僅寫了一個參數i,但實際上就像右面結構體的初始化函數那樣,類的構造函數隱藏定義了一個this指針。

而靜態成員函數,不須要this指針,由于是共用的。對于類僅僅須要標注作用域就能夠了。

所以運行Test a(10); 就相當于 Test a; Test_initialize(%a, 10);其它的類似對照就懂了。


總結:

1、C++類對象中的成員變量和成員函數是分開存儲的。

C語言中的內存四區模型仍然有效!

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

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

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

靜態成員函數不包括指向詳細對象的指針

普通成員函數包括一個指向詳細對象的指針


轉載于:https://www.cnblogs.com/yangykaifa/p/6876542.html

總結

以上是生活随笔為你收集整理的C++编译器对属性和方法的处理机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。