c++關(guān)鍵字 哪些函數(shù)能被聲明為虛函數(shù)?為什么?
哪些函數(shù)能被聲明為虛函數(shù)?為什么?非靜態(tài)成員函數(shù)可以聲明為虛擬函數(shù)。因?yàn)樗菍?duì)象的一部分1。虛函數(shù)的概念虛函數(shù)是用virtual關(guān)鍵字聲明的基類(lèi)函數(shù)。如果一個(gè)函數(shù)在基類(lèi)中被指定為virtual,并且在
哪些函數(shù)能被聲明為虛函數(shù)?為什么?
非靜態(tài)成員函數(shù)可以聲明為虛擬函數(shù)。
因?yàn)樗菍?duì)象的一部分
1。虛函數(shù)的概念
虛函數(shù)是用virtual關(guān)鍵字聲明的基類(lèi)函數(shù)。如果一個(gè)函數(shù)在基類(lèi)中被指定為virtual,并且在派生類(lèi)中有該函數(shù)的另一個(gè)定義,編譯器將知道我們不希望靜態(tài)連接該函數(shù)。我們真正需要的是根據(jù)調(diào)用函數(shù)的對(duì)象的類(lèi)型來(lái)選擇在程序的特定位置調(diào)用哪個(gè)函數(shù)。
2. Define
語(yǔ)法:virtual function return type function name(parameter table){function body}
虛擬函數(shù)必須是基類(lèi)的非靜態(tài)成員函數(shù),其訪問(wèn)權(quán)限可以是private、protected或public。虛擬函數(shù)的一般形式在基類(lèi)的類(lèi)定義中定義:
類(lèi)基類(lèi)名稱{
…
要在派生類(lèi)中重載的虛擬返回值類(lèi)型函數(shù)名稱(參數(shù)列表);
虛函數(shù)的定義?
函數(shù)不能同時(shí)是虛擬函數(shù)和內(nèi)聯(lián)函數(shù)。嚴(yán)格地說(shuō),即使可以創(chuàng)建內(nèi)聯(lián)虛擬函數(shù),或者將虛擬函數(shù)聲明為內(nèi)聯(lián)函數(shù),編譯器也不會(huì)內(nèi)聯(lián)展開(kāi)此類(lèi)函數(shù),而是將其視為普通函數(shù)。編譯器拒絕展開(kāi)非虛擬內(nèi)聯(lián)函數(shù)。C編譯器通常首先報(bào)告一個(gè)錯(cuò)誤:“inline interrupt-function too large”。如果內(nèi)聯(lián)函數(shù)調(diào)用自身,或?qū)⑵涞刂穫鬟f到某處,則編譯器必須生成一個(gè)普通(內(nèi)聯(lián))函數(shù)。對(duì)于內(nèi)聯(lián)虛擬函數(shù),編譯器將它們視為普通虛擬函數(shù)。最好不要在應(yīng)用程序中使用內(nèi)聯(lián)虛擬函數(shù),因?yàn)樗鼈儙缀鯊奈磾U(kuò)展過(guò)。實(shí)際上,開(kāi)發(fā)人員通常在類(lèi)聲明中放置一個(gè)簡(jiǎn)短的虛函數(shù)。這樣做的目的不是將函數(shù)擴(kuò)展為內(nèi)聯(lián)函數(shù),而是使程序更加方便和可讀。