p278
多態性:從類Employee的函數中取得“正確的”行爲,而又不依賴於實際使用的到底是哪一種Employee(我怎麼覺得是依賴的?不是明確聲明瞭m是manager嗎?那調用的肯定就是manager的print()啊~~),這就是所謂的多態性。一個帶有虛函數的類型被稱爲是一個多態類型。要在C++裏取得多態性的行爲,被調用的函數就必須是虛函數,而對象則必須是通過指針或者引用去操作的。如果直接操作一個對象(而不是通過指針或引用),它的確切類型就已經爲編譯器所知,因此也就不需要運行時的多態性了。(不明白爲毛一定要運行時的多態性?)。
純虛函數:
對於類Shape,把虛函數聲明爲純虛函數會更好。用=0作爲初始式就使虛函數成爲“純虛的”:
virtual void rotate(int)=0; //純虛函數
如果一個類裏存在一個或者多個純虛函數,這個類就是抽象類。不能創建抽象類的對象!一個未在派生類裏定義的純虛函數仍舊還是一個純虛函數,這種情況也將使該派生類仍爲一個抽象類,所以該派生類依然不能創建對象。
抽象類的最重要用途就是提供一個界面,而又不暴露任何實現的細節。不暴露任何細節的理解是不是:因爲任何派生類都可以自己重新實現抽象類中的部分虛函數?