物聯(lián)網(wǎng)/嵌入式工程師
重磅升級(jí):新增硬件電路設(shè)計(jì)與實(shí)戰(zhàn),讓你軟硬通吃,同級(jí)PK無(wú)敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門(mén)高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢(shì)!
class Coder : public Staff
{
};
可以看到,Coder 在繼承 Staff 的時(shí)候,有一個(gè) public 關(guān)鍵字,來(lái)看看這個(gè) public的作用。
我們之前已經(jīng)講過(guò),可以為成員變量和成員函數(shù)設(shè)置權(quán)限修飾符來(lái)設(shè)置權(quán)限。但是這在繼承的時(shí)候就會(huì)產(chǎn)生一個(gè)問(wèn)題:子類(lèi)中是否要保持對(duì)父類(lèi)成員的權(quán)限,而 C++ 將這個(gè)選擇權(quán)交給了程序員。
在 C++ 中,對(duì)父類(lèi)成員的權(quán)限,子類(lèi)中可以進(jìn)行重新的定義,這個(gè)定義就是通過(guò)繼承時(shí)候?qū)懙膒ublic 來(lái)實(shí)現(xiàn)的。
可以看到,我們?cè)谏鲜龀绦蛑惺褂昧?public 修飾符,那么父類(lèi)中的成員函數(shù)和成員變量將會(huì)保持父類(lèi)的權(quán)限。這種是使用最廣泛的繼承方式,我們把它叫做公有繼承。
接下來(lái),再來(lái)看一個(gè)重要的概念,多態(tài)。
我們來(lái)嘗試做這樣一件事,我們?cè)谧宇?lèi)和父類(lèi)中都定義一個(gè)同名函數(shù)
class Base
{
public:
void func(){
printf("this is Base\n");
}
}
class Child : public Base
{
public:
void func(){
printf("this is Child\n");
}
}
嘗試調(diào)用一下,為了方便,我們采用分配到堆內(nèi)存的方式創(chuàng)建一個(gè)子類(lèi)對(duì)象,然后調(diào)用 func 函數(shù):
int main(int argc,char **argv)
{
Child * obj = new Child();
obj->func();
delete obj;
return 0;
}
運(yùn)行程序,我們發(fā)現(xiàn)這個(gè) func 是子類(lèi)的 func。我們?cè)賹?duì)程序做一點(diǎn)修改:
int main(int argc,char **argv)
{
Child * obj = new Child();
Base * baseobj = (Base *)obj;
baseobj->func();
delete obj;
return 0;
}
我們把這個(gè) Child 指針強(qiáng)轉(zhuǎn)成 Base 指針(對(duì)象的轉(zhuǎn)換我們?cè)谙乱粋€(gè)小結(jié)詳細(xì)講解),這時(shí)候,再來(lái)運(yùn)行一下。我們發(fā)現(xiàn),這一次運(yùn)行的卻是父類(lèi)的 func 函數(shù)。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)