靜態(tài)多態(tài):
早綁定 --->函數(shù)重載? 在編譯時(shí)就已經(jīng)確定調(diào)用哪個(gè)函數(shù)
動(dòng)態(tài)多態(tài):
晚綁定 --->繼承類間的同名函數(shù)調(diào)用,當(dāng)父類指針指向子類對(duì)象時(shí)与帆,在運(yùn)行時(shí)才判定調(diào)用的是子類中的同名函數(shù)帮坚,而非父類鄙漏。 加virtual 關(guān)鍵字,變?yōu)樘摵瘮?shù)
【動(dòng)態(tài)多態(tài)的內(nèi)存泄露問題】
使用delete銷毀父類指針结洼,只會(huì)執(zhí)行父類的析構(gòu)函數(shù)
銷毀子類指針蟀给,會(huì)執(zhí)行父類和子類的析構(gòu)函數(shù)
但在多態(tài)中蝙砌,是用一個(gè)父類的指針指向一個(gè)子類的內(nèi)存,因此無法執(zhí)行子類的析構(gòu)函數(shù)? Shape?*s1=new?Circle(3,4,5.0);
使用【虛析構(gòu)函數(shù)】來解決
virtual不能修飾:
普通函數(shù)(非類內(nèi))
靜態(tài)函數(shù)(static)
內(nèi)聯(lián)函數(shù)(inline)
構(gòu)造函數(shù)
重載跋理,隱藏择克,覆蓋的區(qū)別:
(1)重載是指同一類中兩個(gè)同名函數(shù),但是參數(shù)的類型和數(shù)量不同(靜態(tài)多態(tài))
(2)隱藏是指子類對(duì)象調(diào)用函數(shù)時(shí)薪介,對(duì)父類同名函數(shù)的隱藏祠饺。具有同名函數(shù)越驻,即使參數(shù)不同汁政。 如果要調(diào)用父類的該函數(shù)需要:子類對(duì)象.父類::函數(shù)
?(3)覆蓋是指父類指針指向子類對(duì)象的情況下,通過父類指針調(diào)用虛函數(shù)時(shí)缀旁,子類同名虛函數(shù)對(duì)父類同名虛函數(shù)的覆蓋记劈。具有同名的虛函數(shù),且參數(shù)與返回類型也相同并巍。(動(dòng)態(tài)多態(tài))
1.對(duì)象大心磕尽:
指類實(shí)例化對(duì)象時(shí),數(shù)據(jù)成員占有內(nèi)存空間的大小懊渡,不包括成員函數(shù)刽射。沒有任何數(shù)據(jù)成員的類理論上講不占任何內(nèi)存。
2.對(duì)象地址:
指通過一個(gè)類實(shí)例化一個(gè)對(duì)象時(shí)剃执,對(duì)象占有一定的內(nèi)存單元誓禁,這個(gè)對(duì)象占據(jù)的第一個(gè)單元的地址即是對(duì)象的地址
3.對(duì)象成員地址:
指當(dāng)用一個(gè)類實(shí)例化一個(gè)對(duì)象時(shí),這個(gè)對(duì)象可能有多個(gè)數(shù)據(jù)成員肾档,由于數(shù)據(jù)成員的數(shù)據(jù)類型不同摹恰,那么占據(jù)的空間大小也就不同辫继,這個(gè)類的每個(gè)成員都會(huì)占一定的空間,每個(gè)數(shù)據(jù)成員的地址也就是對(duì)象成員的地址不同
4.虛函數(shù)表指針:
指在有虛函數(shù)時(shí)俗慈,實(shí)例化一個(gè)對(duì)象時(shí)姑宽,這個(gè)對(duì)象的第一塊內(nèi)存中存放的是一個(gè)指針,是虛函數(shù)表的地址闺阱,大小為4炮车。
5.如果實(shí)例化對(duì)象沒有數(shù)據(jù)成員,就會(huì)有一個(gè)內(nèi)存單元來標(biāo)記這個(gè)對(duì)象的存在酣溃,如果對(duì)象中有數(shù)據(jù)成員示血,就不用內(nèi)存單元來標(biāo)記這個(gè)對(duì)象的存在,這個(gè)對(duì)象的大小就是數(shù)據(jù)成員所占內(nèi)存的大小救拉。
【抽象類】
含有純虛函數(shù)的類难审,無法實(shí)例化對(duì)象,其子類也可以是抽象類亿絮,也可以不是(只有當(dāng)子類不是抽象類告喊,即對(duì)所有函數(shù)都實(shí)現(xiàn)了,才可以用這個(gè)子類實(shí)例化對(duì)象)
class?Shape{
public:
????virtual?double?calcArea(){return?0};//虛函數(shù)
????virtual?double?calcPerimeter()=0;//純虛函數(shù)(在后面加“=0”)
}
接口類:
僅含有純虛函數(shù)的類稱為接口類
(沒有數(shù)據(jù)成員派昧,只有成員函數(shù)黔姜,成員函數(shù)是純虛函數(shù))
RTTI 運(yùn)行時(shí)類型識(shí)別(Run-Time Type Identification )
有的編譯器需要手動(dòng)包含頭文件#include <typeinfo>
在父類指針指向子類對(duì)象時(shí),為了能夠調(diào)用子類對(duì)象的非虛函數(shù)蒂萎,引入RTTI秆吵,進(jìn)行對(duì)象類型識(shí)別與對(duì)象指針的轉(zhuǎn)換