C++ 快速導覽 - 類別 虛擬繼承

若 Demo4 類別 (class) 繼承自 Demo3 及 Demo2 , Demo3 及 Demo2 又同時繼承自 Demo ,此時 Demo3 及 Demo2 將會同時擁有 Demo 的成員 (member) ,此時若 Demo4 的物件 (object) 呼叫原屬於 Demo 的成員會產生一個問題,這個問題就是到底呼叫的是 Demo3 還是 Demo2 的部份?



要解決這問題就是同時在 Demo3 及 Demo2 繼承的 Demo 宣告為 virtual ,舉例無下
#include <iostream>

class Demo {
public:
    Demo() {
        a = 1;
        b = 1;
    }
    
    int do_something() {
        return a + b;
    }
    
protected:
    int a;
    int b;
};

class Demo2: virtual public Demo {
};


class Demo3: virtual public Demo {
};

class Demo4: public Demo2, public Demo3 {
};

int main(void) {
    Demo4 d;
    std::cout << d.do_something() << std::endl;

    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:classdemo22.cpp
    功能:示範 C++ 程式
    作者:張凱慶
    時間:西元 2013 年 1 月 */


virtual 放在冒號後的 Demo 前
class Demo2: virtual public Demo {
};


class Demo3: virtual public Demo {
};


編譯執行結果如下



中英文術語對照
類別class
成員member
物件object


您可以繼續參考
類別


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...

沒有留言: