在C++的設(shè)計(jì)中關(guān)鍵的問(wèn)題總是與類型、歧義性、訪問(wèn)控制等有關(guān)。而不是那些語(yǔ)法方面的問(wèn)題。
對(duì)象布局模型派生類的實(shí)現(xiàn)也就是簡(jiǎn)單的將基類的成員和派生類的成員并列放置。例如:
給定了,
?
class?A{
int?a;
public:
/*member?function*/
};
class?B:public?A{
int?b;
public:
/*member?function*/
};
對(duì)類B的一個(gè)對(duì)象采用一個(gè)結(jié)構(gòu)來(lái)表示:

sturct?B
{/**//*generated?c?code*/
int?a;
int?b;
};?
1、基成員和派生成員之間的名字沖突由編譯器賦于互不沖突的名字。
2、函數(shù)調(diào)用被處理得像根本沒(méi)有派生時(shí)那樣。
3、與C語(yǔ)言相比,這里時(shí)間或者空間沒(méi)有增加。
保護(hù)模型
類被做為保護(hù)單位。基本規(guī)則是不能自己授予自己訪問(wèn)一個(gè)類的權(quán)力。只有放在類內(nèi)的聲明可以。按照默認(rèn)方式,所有信息都是私用的。
如果只想提繼承一個(gè)實(shí)現(xiàn),那么就應(yīng)私有派生。私有派生把基類留做實(shí)現(xiàn)細(xì)節(jié)。
公有派生將使派生類的使用方能訪問(wèn)基類提供的所有界面。
C++的訪問(wèn)控制是為了防止意外事件而不是為了防止欺騙。任何程序設(shè)計(jì)語(yǔ)言,只要他支持對(duì)原始存儲(chǔ)器的訪問(wèn),就會(huì)使數(shù)據(jù)處于開放的狀態(tài)。使所有有意按照某種違反數(shù)據(jù)項(xiàng)原本類型規(guī)則所描述的方式去觸動(dòng)它的企圖都能實(shí)現(xiàn)。
保護(hù)系統(tǒng)的職責(zé)就是保證所有違反類型系統(tǒng)的操作都只能顯式的進(jìn)行。并且減少這種操作的必要性。???
存儲(chǔ)分配和構(gòu)造函樹
c語(yǔ)言里對(duì)象有三種方式分配:
1、堆棧上(在自動(dòng)存儲(chǔ)區(qū))。
2、在固定的地址。
3、在自由空間(在堆里,或者說(shuō)在動(dòng)態(tài)空間)。
C語(yǔ)言里,在自由空間分配一個(gè)對(duì)象時(shí)只涉及到調(diào)用一個(gè)分配函樹。例如:
monitor?*?p?=?(monitor?*)malloc(sizeof(?monitor));這顯然無(wú)法保證會(huì)調(diào)用構(gòu)造函樹。因此C++引入了一個(gè)運(yùn)算賦,以便保證分配和初始化都能完成。
monitor?*?p?=?new?monitor;delete 被引入,做為new的對(duì)應(yīng)物。就像free做為malloc的對(duì)應(yīng)物。