前言
上一篇分享了《C語言對象編程第一彈:封裝與抽象》以實(shí)例分享了C語言對象編程的繼承與抽象。
本次分享C語言對象編程第二彈:繼承
。
繼承簡單說來就是父親有的東西,孩子可以繼承過來。
當(dāng)創(chuàng)建一個類時,我們不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類繼承了一個已有的類的成員即可。
這個已有的類稱為基類,新建的類稱為派生類。
繼承在C++ 中還會細(xì)分為很多,我們就不考慮那么多了,只分享比較簡單也比較實(shí)用的。
在C語言對象編程中,有兩種方法實(shí)現(xiàn)繼承:
第一種是:結(jié)構(gòu)體包含結(jié)構(gòu)體實(shí)現(xiàn)繼承。
第二種是:利用私有指針實(shí)現(xiàn)繼承。
下面依舊以實(shí)例進(jìn)行分享:
結(jié)構(gòu)體包含結(jié)構(gòu)體
我們以上一篇筆記的例子為例繼續(xù)展開。上一篇的例子為:
假如我們要操作的對象變?yōu)殚L方體,長方體就可以繼承長方形的數(shù)據(jù)成員和函數(shù),這樣就可以復(fù)用之前的一些代碼。具體操作看代碼:
1、結(jié)構(gòu)體
2、頭文件
3、長方體對象創(chuàng)建、刪除函數(shù)
4、操作函數(shù)
5、測試及測試結(jié)果
可見,長方體結(jié)構(gòu)體可以繼承長方形結(jié)構(gòu)體的數(shù)據(jù)、長方體對象相關(guān)操作也可以繼承長方形對象的相關(guān)操作。這樣可以就可以復(fù)用上一篇關(guān)于長方形對象操作的一些代碼,提高了代碼復(fù)用率。
利用私有指針實(shí)現(xiàn)繼承
在結(jié)構(gòu)體內(nèi)部增加一個私有指針成員,這個私有成員可以達(dá)到擴(kuò)展屬性的作用,比如以上的Rect結(jié)構(gòu)體設(shè)計(jì)為:
typedef struct _Rect
{
char *object_name;
int length;
int width;
void* private;
}Rect, *pRect;
這個private指針可以在創(chuàng)建對象的時候與其它拓展屬性做綁定。比如:
想要拓展的數(shù)據(jù)為:
帶拓展屬性的對象創(chuàng)建函數(shù):
顯然,使用私有指針也是可以實(shí)現(xiàn)繼承的一種方式。
不過對于本例來說,使用私有指針來做繼承似乎弄得有點(diǎn)混亂,因?yàn)殚L方形的屬性大致就是只有長、寬,加了個高之后就不叫長方形了。
這個例子不太適合做演示,越演示越亂。。就不繼續(xù)演示下去了。我們大概知道有這樣一種方法就可以。
結(jié)構(gòu)體里包含一個私有指針成員在很多大牛的代碼中經(jīng)常都有看到,盡管可能不是實(shí)現(xiàn)對象繼承,所以應(yīng)盡量掌握。
以上就是本次的分享,如有錯誤,歡迎指出!
本篇筆記相關(guān)代碼可在公眾號后臺回復(fù)關(guān)鍵字:C語言對象編程第一彈:
繼承,即可獲取。
猜你喜歡
為了便于公眾號讀者交流學(xué)習(xí),小編創(chuàng)建了相關(guān)相關(guān)交流群??游挥邢蓿信d趣的朋友可以掃碼下方二維碼加我微信,由我邀請入群:
歡迎大家進(jìn)群交流、共同進(jìn)步。同時,我也會關(guān)注一些大家問的一些問題,從中挑選一些具有代表性的、并且在我知識范圍內(nèi)的問題寫出相關(guān)文章做分享。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!