日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]C++中的class從面向?qū)ο罄碚摮霭l(fā),將變量(屬性)和函數(shù)(方法)集中定義在一起,用于描述現(xiàn)實世界中的類。從計算機的角度,程序依然由數(shù)據(jù)段和代碼段構(gòu)成。C++編譯器如何完成面向?qū)ο罄碚摰接嬎銠C程序的

C++中的class從面向?qū)ο罄碚摮霭l(fā),將變量(屬性)和函數(shù)(方法)集中定義在一起,用于描述現(xiàn)實世界中的類。從計算機的角度,程序依然由數(shù)據(jù)段和代碼段構(gòu)成。

C++編譯器如何完成面向?qū)ο罄碚摰接嬎銠C程序的轉(zhuǎn)化?換句話:C++編譯器是如何管理類、對象、類和對象之間的關(guān)系?具體的說:具體對象調(diào)用類寫的方法,那c++編譯器是如何區(qū)分,是那個具體的類,調(diào)用這個方法呢?

我們先看下面一段代碼:


#includeusing?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?靜態(tài)放在全局區(qū)??
public:??
????int?getK()?const?{?return?k;?}?//4?放在代碼區(qū),沒占用具體的內(nèi)存空間??
????void?setK(int?val)?{?k?=?val;?}?//4??
??
??
protected:??
private:??
};?//24??16???
??
??
struct?S1??
{??
????int?i;??
????int?j;??
????int?k;??
};?//12??
??
??
struct?S2??
{??
????int?i;??
????int?j;??
????int?k;??
????static?int?m;??
};?//16??
??
??
void?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");??
}??
/**?
c1:12?
c2:12?
s1:12?
s2:12?
*/

用內(nèi)存四區(qū)解釋 C++屬性和方法:C++類對象中的成員變量和成員函數(shù)是分開存儲的。
成員變量:

普通成員變量:存儲于對象中,與struct變量有相同的內(nèi)存布局和字節(jié)對齊方式
靜態(tài)成員變量:存儲于全局?jǐn)?shù)據(jù)區(qū)中
成員函數(shù):存儲于代碼段中
問題出來了:很多對象共用一塊代碼,代碼是如何區(qū)分具體對象的呢?換句話說:int getK() const { retur k},代碼是如何區(qū)分,具體obj1、obj2、obj3對象的k值?



對于一個類,編譯器會將所有的數(shù)據(jù)成員打包成struct,而所有的成員函數(shù)會添加上this指針,正如圖片左邊向右邊轉(zhuǎn)換一樣,這樣C++的類基本和C就區(qū)別不大了。

結(jié)論:

1.C++類對象中的成員變量和成員函數(shù)是分開存儲的。C語言中的內(nèi)存四區(qū)模型仍然有效!
2.C++中類的普通成員函數(shù)都隱式包含一個指向當(dāng)前對象的this指針。
3.靜態(tài)成員函數(shù)、成員變量屬于類
靜態(tài)成員函數(shù)與普通成員函數(shù)的區(qū)別:靜態(tài)成員函數(shù)不包含指向具體對象的指針,普通成員函數(shù)包含一個指向具體對象的指針。




本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉