請用C++,java,C#等任意一種面嚮物件語言實現一個計算機控制檯程式,要求輸入的兩個數和運算子號,得到結果。
你看到題目,覺得這道題不難,沒一會就寫好了,如下
version_1。cpp
其實上面的程式碼有幾個問題。
命名a b c d 很不規範
判斷分支的寫法,寫了4個if,意味著每個條件都要做判斷,相當於計算機做了3次無用功
如果除數為0則將程式異常。雖然C++程式碼裡會輸出inf,但是相對於應用場景來說是有問題的。
針對以上的問題,進行修改,結果如下:
version_2。cpp
改到實現計算器是沒有問題的,但是有沒有寫出讓人滿意的程式碼呢?
現在我讓你寫一個window程式的計算器,要有圖形介面的,是不是說我下面這段程式碼要再寫一遍呢?
還是說你打算直接複製過去?
題目說要用面向物件的語言寫出計算器的程式。
面向物件,封裝,我們把這段程式碼封裝成類,實現程式碼的複用。
version_3。cpp
這樣,我們就把計算方法封裝好了,實現了程式碼的複用。
現在,來了一個新需求,要加一個 開根號(sqrt) 的運算,你要怎麼改?
只要修改 Calc 類就行了,加一個 if 判斷。
這樣可行,
但是
有一個問題,你現在要加一個開根號的運算,卻要 加減乘除 的運算都參與編譯,如果你大意了,把加法寫做除法,那涼涼。
所以引出了我們今天所學的簡單工廠模式,
其實就是如何去例項化物件的問題
針對不同的的運算子生成不同的運算類物件,利用C++的多型呼叫子類的函式進行運算。
如果需要加一個 開根號的運算,實現一個 開根號的運算類,在工廠類中增加一個判斷就好了,就不會改到原來的運算類的實現,也不用原有的運算類參與到編譯的過程,避免了出錯。
version_4。cpp
最後複習一下C++多型的三個必要條件:
是一個指標
父類指標指向子類物件
呼叫虛擬函式
你學會了嗎?自己實現一遍吧,會有收穫的。