新聞中心
下面用實(shí)際的案例來(lái)說(shuō)明C++類(lèi)概念的問(wèn)題,在世界中,經(jīng)常有屬于同一類(lèi)的對(duì)象,比如,你使用的電腦只是世界上很多電腦中的一臺(tái)而已,面向?qū)ο筌浖校灿泻芏喙蚕硐嗤卣鞯牟煌膶?duì)象。

為袁州等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及袁州網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、袁州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
首先一個(gè)沒(méi)有明顯的含有成員的C++類(lèi),它的大小不是0,因?yàn)閷?shí)際上它不是空的,它被編譯器安插了一個(gè)char,為的是使這個(gè)C++類(lèi)的兩個(gè)對(duì)象能夠在內(nèi)存中被分配***的地址.至于兩個(gè)派生的C++類(lèi)Y和Z,因?yàn)檎Z(yǔ)言本身造成的負(fù)擔(dān),還有編譯器對(duì)于特殊情況進(jìn)行的優(yōu)化處理,再有Alignment的限制,因此結(jié)果變成了8.這個(gè)8是怎么組成的?
- typedef int length; //zai
- class point3d
- {
- public:
- //length被決議成global typedef 也就是int
- //_val被決議成Point3d::_val
- void mumble(length val){_val=val;}
- length mumble(){return _val;}
- //……
- private:
- //length必須在這個(gè)class對(duì)它的***個(gè)參考操作之前被看見(jiàn)
- //這樣聲明將使先前的參考操作不合法
- typedef float length;
- length _val;
- //……
不過(guò)需要注意的是不同的編譯器Y和Z大小的結(jié)果也會(huì)不同.因?yàn)樾碌木幾g器會(huì)將一個(gè)空的virtual base class看做是派生類(lèi)對(duì)象的開(kāi)頭部分,因此派生類(lèi)有了member,因此也就不必分配char的那一個(gè)bytes.也就用不到填補(bǔ)的3個(gè)bytes,因此有可能在某些編譯器中
- Point3d
- Point3d::translate(const Point3d &pt)
- {
- x+=pt.x;
- y+=pt.y;
- z+=pt.z;
- }
雷神1、4、8……的說(shuō)了一堆,也不知大家明白與否,但是這第三章,讀起來(lái)確實(shí)比前兩章順多了。我們繼續(xù)我們來(lái)看Data Member 的Binding,現(xiàn)在我們對(duì)數(shù)據(jù)成員的綁定只需要記住一個(gè)防御性風(fēng)格:始終把嵌套類(lèi)型的聲明放在class的開(kāi)始部分,這樣做可以確保非直覺(jué)綁定的正確性??聪旅娴囊粋€(gè)例子:
- class X{};
- class Y:public virtual class X{};
- class Z:public virtual class X{};
- class A:public Y,public Z{};
怎么成了抄書(shū)了,雷神也不知不覺(jué),可能是在這章的理解上比較容易些吧,不用去想個(gè)看的見(jiàn)摸的著的東西比劃。好象小朋友學(xué)算術(shù)。一位數(shù)的計(jì)算不用掰手指頭,可是兩位數(shù)或者三位數(shù)的計(jì)算,手指頭加上腳指頭還是不夠。學(xué)習(xí)就是這么回事。理解力和抽象能力很重要。回來(lái)繼續(xù)學(xué)習(xí)。
通過(guò)這一章我還知道了。數(shù)據(jù)成員的布局。數(shù)據(jù)成員的存取。并且對(duì)Static data members有了進(jìn)一步的了解,在class的生命周期中,靜態(tài)成員被看作是全局變量,每一個(gè)member的存取不會(huì)導(dǎo)致任何空間或效率上的額外負(fù)擔(dān)。不論是從一個(gè)復(fù)雜的繼承關(guān)系中繼承還是直接聲明的。
Static data member都只會(huì)有一個(gè)實(shí)體。并且有著非常直接的存取路徑。另外如果兩個(gè)C++類(lèi)都聲明了一個(gè)相同名字的靜態(tài)成員變量,那么編譯器會(huì)通過(guò)一種算法,為我們解決名字沖突的問(wèn)題。而非靜態(tài)的成員變量的存去實(shí)際上是通過(guò)implicit class object(this指針)來(lái)完成的。
【編輯推薦】
- C與C++中標(biāo)準(zhǔn)輸入實(shí)現(xiàn)方式上的一點(diǎn)區(qū)別
- C++編譯器如何對(duì)Const常量進(jìn)行分配存儲(chǔ)空間
- C++類(lèi)庫(kù)設(shè)計(jì)的基本構(gòu)思與方法
- 玩轉(zhuǎn)C++語(yǔ)言的幾種方法
- 如何更好的進(jìn)行C++代碼編制
本文題目:概括C++類(lèi)學(xué)習(xí)總結(jié)
標(biāo)題來(lái)源:http://m.fisionsoft.com.cn/article/coegceo.html


咨詢
建站咨詢
