C/C++ 回調函數(即函數指針)的理解及一些思考

【01】要想從本質的去函數某一類函數,就要問爲什麼要引入這類函數?即下面回答爲什麼要使用回調函數 。

【寫在前面】網上有很多資料,給出概念後,就洋洋灑灑的給出回調函數的例子,好多人看了,覺得我知道怎麼用了,但很多時候我們真沒有從本質上去理解回調函數 。其中有一個經典的例子賣東西留電話號碼之類的,看懂意思了,但這樣的說明很泛的。看了之後,如果不想深究的兄弟覺得自己懂了,想深究的兄弟,覺得越看越似懂非懂,苦呀!

1. 【爲什麼要使用回調函數:理解01】

     回調函數爲了封裝特性。即C語言中存在大量的過程函數,如你想在某個函數(假如叫A函數或者說你想使用某個庫,此庫的A函數上有某些功能很合適你的使用場景)增加某些功能(即之前A函數有1、2功能,現在想加3功能這樣會更符合你的使用場景,本來可以直接在A函數改的(或者你只有庫,沒有源碼),但這樣違背了程序的開閉原則(即對於擴展是開放的,但是對於修改是封閉的),於是使用開原則,於是你使用B函數封裝了A函數,B函數可能有A函數更多的功能,一般都有,否則你直接使用A函數即可,B函數是按你的使用場景寫的(注:回調函數概念中隱含有這層意思,如果不理解開閉原則的人,很難透徹的理解到這層意思,雖然看概念大家都覺得自已懂了,但是如果不懂什麼是開閉原則的兄弟,遠沒有真正的理解回調函數的概念),這就是回調函數本質過程,回調函數功能就是A函數功能(注意是功能),你把它A函數作成參數則需要把A函數改變成指針就成了回調函數。當然,封裝後完全可以設定某個條件才能觸發A函數產生,無條件也是條件的一種,所以有些B函數根本就沒有if什麼就直接使用A函數。

2. 【爲什麼要使用回調函數:理解02(不太是原因,只能算是一個知識點吧)】

動態聯編問題。這本就是指針的屬性,回調函數是指針,可以往這方面使用。但這應該不是它產生主要原因。第一個原則,已經足夠它出生了。開閉原則真的很大,大過天呀!真的!哈!!

 

3.【未清楚的問題】

回調函數是什麼時候引入的,是先在C語言中引入,然後才引入C++的,還是先是C++引入,然後C才引入?有知道的兄弟告知我一下,最好留下證據,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章