C++ 速查手冊

9.19 - virtual 函數

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

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

舉例如下

#include <iostream>
  
class Demo {
public:
    virtual int do_something() {
        return 1;
    }
};

class Demo2: public Demo {
public:
    virtual int do_something() {
        return 2;
    }
};

int main(void) {
    Demo* d_ptr;
    Demo2 d2;
    d_ptr = &d2;
    
    std::cout << d_ptr->do_something() << std::endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://kaiching.org/
   檔名:u0919.cpp
   功能:示範 C++ 的類別
   作者:張凱慶*/

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

Demo* d_ptr;
Demo2 d2;
d_ptr = &d2;
    
std::cout << d_ptr->do_something() << std::endl

編譯執行,結果如下

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

相關教學影片

上一頁 9.18 - 多重繼承
回 C++ 速查手冊首頁
下一頁 9.20 - 虛擬繼承
回 C++ 教材
回程式語言教材首頁