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