C++ 速查手冊 V1.00 - 單元 9.19 - virtual 函數




當類別有成員函數宣告為 virtual 的時候,此成員函數可作動態綁定 (dynamic binding) ,這是說不需區分該成員函數定義在衍生類別或基礎類別裡。


這樣的機制被稱為虛擬機制 (virtual mechanism) ,必須在參考或指標才可使用。

舉例如下


001 #include <iostream>
002
003 class Demo {
004 public:
005    virtual int do_something() {
006       return 1;
007    }
008 };
009
010 class Demo2: public Demo {
011 public:
012    virtual int do_something() {
013       return 2;
014    }
015 };
016
017 int main(void) {
018    Demo* d_ptr;
019    Demo2 d2;
020    d_ptr = &d2;
021
022    std::cout << d_ptr->do_something()
023              << std::endl;
024
025    return 0;
026 }
027  
028 /* Kaiching Chang 
029    u0919.cpp
030    2014-02 */

DemoDemo2 都有 virtualdo_something() 函數成員,這裡用指向 Demo 的指標呼叫 Demo2do_something()


018 Demo* d_ptr;
019 Demo2 d2;
020 d_ptr = &d2;
021
022 std::cout << d_ptr->do_something()
023           << std::endl;

編譯執行,結果如下


g$ g++ u0919.cpp
$ ./a.out
2
$

continue ...

沒有留言: