在平常寫程式的時候,經常會遇到兩個函式,明明傳入的引數和傳值的值都相同,但就是裡面的內容略有不同(也就是業務邏輯稍有不同)。
void f1(int num1,intnum2)
void f2(int num1,int
num2)
對於**略有不同的函式,經常的乙個處理方案是:通過增加乙個引數,傳入乙個值,然後進行判斷,以便正確地選用那一點點不同的處理。(如下面片段)
void f(int num1,int num2,boolisfirst)
else
}
但是這麼做有不好的地方,就是增加了**閱讀者的思考量,另外,當相同邏輯的**不是兩個、三個、而是更多的時候,選用那一段業務**的判斷就會隨之增多,並且這樣很不利於後面程式的拓展。
此時如果兩個函式有乙個公共的基類。通過傳遞物件的方式,整個程式就變得優雅起來了。(見下面**)
classbase
}class sub1:public
base
class sub2:public
base
public
void use_f(base *mybase)
void
main()
以上是我對多型的理解,讓多型可以通過呼叫傳遞物件的方式,實現特定的函式的動態呼叫。當然也可以通過反射來動態呼叫函式。反射還沒有認真學習過,且先放著,後面研究。
從函式呼叫來思考多型
在平常寫程式的時候,經常會遇到兩個函式,明明傳入的引數和傳值的值都相同,但就是裡面的內容略有不同 也就是業務邏輯稍有不同 void f1 int num1,int num2 void f2 int num1,int num2 對於 略有不同的函式,經常的乙個處理方案是 通過增加乙個引數,傳入乙個值,...
從lua呼叫C函式
最近在進入lua程式設計的狀態,一度令我困惑的是,lua提供的功能少的可憐,跟自備電池的python相比,可說是簡陋了。連table的列印,都需要自己實現,也因此有了一打的第三方方案。後來我想明白了,以lua和c如此緊密的關係,只需要建立lua的binding,那麼豐富而效能強大的c庫資源完全可以為...
從彙編看函式呼叫
首先介紹幾個名詞 棧幀 也叫過程活動記錄,是編譯器用來實現過程 函式呼叫的一種資料結構。棧幀中儲存了該函式的返回位址和區域性變數。暫存器 cpu內部用來存放資料的一些小型儲存區域,用來暫時存放參與運算的資料和運算結果。常用的暫存器有 esp 棧指標暫存器 extended stack pointer...