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

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



要解決這問題就是同時在 Demo3Demo2 繼承的 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...

沒有留言: