所屬科目:程式設計
(一)請寫出 CALC(++a, b + 2)巨集展開後的實際運算式,並據此計算resultA 的值。
(二)請問方法(A)以及方法(B)在參數處理方式及實際執行結果上的差異。
(三)若將方法(A)修正為:
#define CALC(x, y) ((x) * (y) + (x))
以便解決運算優先順序之問題,請說明是否可以得到與方法(B)相同 的結果?
(一)請比較一般程式語言中函式參數傳遞機制,傳值(Pass by value)與傳 參考(Pass by reference)的差異。
(二)請寫出上方程式碼執行後輸出的結果。
(三)請依據上方程式碼的輸出結果,說明 Java 在傳遞陣列參數之機制,其 本質是採用傳值還是傳參考?請結合操作 B 以及其後續的指令,解釋 為何輸出結果符合該機制。
(一)請說明過載(Overloading)以及覆寫(Overriding)在 Java 程式語言上 的差別。
(二)上方程式碼展現了那種特性(Overloading 或是 Overriding)?
(三)請寫出執行 new Bird().eat()的輸出結果。
(四)根據上方程式碼,Bird 類別具備飛行 fly()的方法,當要新增一個 Ostrich(鴕鳥,屬於鳥類但卻不會飛行)類別,若採用直接繼承 Bird 類別會遇到什麼問題?
(五)根據(四)所面臨的問題,請提出兩種解決該問題的方法。
(一)定義一個抽象類別 Payment。
(二)將不同支付方式(包含新增之 TaiwanPay)的處理邏輯移至對應子類 別。
(三)寫出重構後呼叫端使用方式。