虛函數(shù)與純虛函數(shù) 舉例說明虛函數(shù)在類的繼承中的作用?
舉例說明虛函數(shù)在類的繼承中的作用?虛函數(shù)是類中聲明為虛的成員函數(shù)。當(dāng)編譯器看到這樣一個(gè)函數(shù)是通過指針或引用調(diào)用的時(shí),它會(huì)對(duì)其執(zhí)行后期綁定,即通過指針(或引用)所指向的類的類型信息來確定該函數(shù)屬于哪個(gè)類
舉例說明虛函數(shù)在類的繼承中的作用?
虛函數(shù)是類中聲明為虛的成員函數(shù)。當(dāng)編譯器看到這樣一個(gè)函數(shù)是通過指針或引用調(diào)用的時(shí),它會(huì)對(duì)其執(zhí)行后期綁定,即通過指針(或引用)所指向的類的類型信息來確定該函數(shù)屬于哪個(gè)類。通常,這樣的指針或引用被聲明為基類的,基類可以指向基類或派生類的對(duì)象。具體的例子可以在網(wǎng)上或相關(guān)的教科書上找到。主要是要進(jìn)一步理解面向?qū)ο蟮母拍?。例如:有一個(gè)類的繼承結(jié)構(gòu)。父類是a,子類B聲明一個(gè)虛函數(shù)vf()和a的指針PA。當(dāng)PA=newa()時(shí),PA->vf()調(diào)用父類a的函數(shù)。當(dāng)PA=newb()時(shí),PA->vf()調(diào)用子類B的函數(shù)這應(yīng)該是后綁定
這種情況更復(fù)雜。以米斯吉亞為例。在計(jì)算機(jī)上,C是8個(gè)字節(jié),也就是指向虛擬表的指針的大小。為此,我想補(bǔ)充一點(diǎn)知識(shí):空類最常用作基類。此時(shí),它們可能占用4個(gè)或更多字節(jié)進(jìn)行對(duì)齊。但是這會(huì)浪費(fèi)空間,特別是當(dāng)多重繼承多個(gè)空基類時(shí)。因此編譯器有空的基類優(yōu)化(ebco)[1],因此沒有非靜態(tài)數(shù)據(jù)成員和虛擬函數(shù)的基類實(shí)際上占用0字節(jié)。因?yàn)锽S說,為了確保兩個(gè)不同的對(duì)象有不同的地址--“為了確保兩個(gè)不同對(duì)象的頭飾應(yīng)該是不同的”,它用這1個(gè)字節(jié)在內(nèi)存中占據(jù)不同的地址。因?yàn)檫@些空類沒有賦值的意義,所以不需要占用更多內(nèi)存。