c++ 形参用指针 还是对象_C语言:聚会上,我发现只有我没有对象!
多態(tài)
這時(shí)候傳來了門鈴聲,Linus大神拎著一瓶酒進(jìn)來,要找C小伙兒喝酒,
他說道:“別聽Java, Python, JavaScript他們瞎BB,你也有對(duì)象,也能進(jìn)行面向?qū)ο蟮木幊?#xff01;我給你舉個(gè)例子。”
“這個(gè)結(jié)構(gòu)體包含了兩個(gè)函數(shù)指針,一個(gè)用來計(jì)算圖形的面積,另外一個(gè)把這個(gè)圖形畫出來。我們把這個(gè)結(jié)構(gòu)體叫做虛函數(shù)表。”
“這有什么用啊?” ?
“在你的Shape中,添加一個(gè)指向該函數(shù)表的指針就行了。” Linus回答。?
????????C和Go都是一臉茫然。?
?“蠢材, 你們想想啊,當(dāng)你創(chuàng)建一個(gè)子類對(duì)象的時(shí)候,比如Rectangle, 把那個(gè)虛函數(shù)指針vptr指向另外一組函數(shù),會(huì)怎么樣?”?
兩人還是不懂,Linus只好繼續(xù)畫圖:?
??????
現(xiàn)在C有點(diǎn)明白了, 無論是Rectangle對(duì)象,還是Square對(duì)象,在調(diào)用Shape_area方法的時(shí)候, 都需要通過vptr這個(gè)指針找到虛函數(shù)表中的area方法,對(duì)于Rectangle,找到的是Rectangel_area方法,對(duì)于Square,找到的是Square_area方法。?
struct Rectangle *r = Rectangle_create(5,5,10,10);
Shape_area((struct Shape *) r);
“其實(shí)吧,你的兄弟C++的多態(tài)實(shí)現(xiàn)原理也是類似的!在運(yùn)行時(shí)查找真正的函數(shù)去執(zhí)行。” ?Ken 總結(jié)到。??
?“對(duì),這種函數(shù)指針的使用方法太常見了,在我的Linux操作系統(tǒng)中也會(huì)定義類似的東西” Linus接口道,?
?“只要IO設(shè)備提供這幾個(gè)函數(shù)的實(shí)際定義,就可以將File結(jié)構(gòu)體的函數(shù)指針指向?qū)?yīng)的實(shí)現(xiàn),那就實(shí)現(xiàn)了用同一套接口操作不同的IO設(shè)備。”
?C語言高興起來:“哈哈,我就說我的指針很厲害吧,這些全是通過指針來實(shí)現(xiàn)的。”?
“是啊,別聽Java, Python, JavaScript他們瞎BB,你也有對(duì)象,也能進(jìn)行面向?qū)ο蟮木幊?#xff01;”? C語言說道:“走,喝酒去!”
作者:zl1zl2zl3原文鏈接:https://blog.csdn.net/zl1zl2zl3/article/details/87892880更多專題1
勤勉于現(xiàn)在、成就于未來——20072線下火
熱開班!!
2
熱烈歡迎隴東學(xué)院信息工程學(xué)院呂院長(zhǎng)蒞臨
西安華清指導(dǎo)工作
3
2020屆本科生年薪百萬,入選華為“天才少
年”!
華清遠(yuǎn)見2020高校助學(xué)計(jì)劃現(xiàn)已正式啟動(dòng)!百萬在線精品課程全科覆蓋,免費(fèi)開放立刻掃碼加小編申請(qǐng)掃碼關(guān)注
帶你逆襲
您點(diǎn)的每個(gè)贊,我都認(rèn)真當(dāng)成了喜歡總結(jié)
以上是生活随笔為你收集整理的c++ 形参用指针 还是对象_C语言:聚会上,我发现只有我没有对象!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件系统服务器管理论文,Linux管理磁
- 下一篇: 现行高考政策公平 辩论_为这些考生高考加