|
*停權中*
|
引用:
Originally posted by harrisonlin
Virtual function, 虛擬函數(一談到虛擬,是不是就讓人覺得莫測高深?),指的是"不經由父類別實作",而交由衍生的類別實作的成員函式。
舉個例子來說,假設我寫了一個"樂器"的類別;由於所有的樂器,像是大鼓,提琴,喇叭等,都各自有其演奏的方式,雖然行為名稱(函式名稱)相同,但真正的行為(成員函式的實作)可能大異其趣(假設我們可以用程式表示出它們的"演奏方式")。所以當大鼓,提琴,喇叭等繼承樂器這個類別之後,必須各自去實作"演奏"這個行為。如果這個行為由"樂器"這個父類別實作,一來不合實際(每個衍生自它的子類別的"演奏方式"都不同"),二來子類別還要再覆寫這個父類別的成員函式,容易造成邏輯上的混淆,所以才將父類別的成員函式定義為"virtual",指明交由衍生類別去實作(而且不實作不行...除非子類別又將這個成員函式定為"virtual",指明由子類別的子類別去實作)。也許你也可以將一個帶有"virtual function" 的類別想像成它的眾多衍生類別的"規格書" - 保證衍生類別一定有著某種"介面(也就是實作那些 virtual function)",雖然各自實作的方式不盡相同。在 Java 中,這種概念被提昇為 "Interface", 也就是"介面",更為直觀,處理的方式也更為清楚。
不知這樣解釋清楚嗎?
|
推~
很棒的解釋!~ 受教了!
|