•理解多態•
在面向對象技術中,對象在收到信息后要予以響應,不同的對象收到同一消息可產生完全不同的結果,這一現象稱為多態。在使用多態技術時,用戶可以發送一個通用的消息,而實現的細節則由接收對象自行決定,這樣同一消息就可以調用不同的方法。
多態有多種不同的形式,其中參數多態和包含多態稱為通用多態,過載多態和強制多態稱為特定多態。
參數多態是應用比較廣泛的,被稱為最純的多態。這是因為同一對象、函數或過程能以一致的形式用于不同的類型。包含多態最常用的例子就是子類型化,即一個類型是另一個類型的子類型。
過載多態是同一變量被用來表示不同的功能而通過上下文以決定一個名所代表的功能。這純粹是一種通過語法對不同語義的對象使用相同的名,編譯能夠消除這一模糊。強制多態是通過語義操作把一個變元的類型加以變換,以符合一個函數的要求,如果不做這一強制性變換將出現類型錯誤。類型的變換可在編譯時完成,通常是隱式進行,當然也可以在動態運行時來做。
多態,即允許將派生類的對象當作基類的對象使用。如果A是基類,B和C是A的派生類,多態函數Test的參數是A的指針。那么Test函數可以引用A、B、C的對象。
C++用關鍵字virtual來聲明一個函數為虛函數,派生類的虛函數將覆蓋(override)基類對應的虛函數的功能。
結合“抽象基類”和“多態”有如下突出優點:
(1)應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。這一招叫“以不變應萬變”,可以大大提高程序的可復用性(這是接口設計的復用,而不是代碼實現的復用)。
(2)派生類的功能可以被基類指針引用,這叫向后兼容,可以提高程序的可擴充性和可維護性。以前寫的程序可以被將來寫的程序調用不足為奇,但是將來寫的程序可以被以前寫的程序調用那可了不起。