#include using namespace std;
enum color ;
class animal
virtual int getage()
virtual void setage(int age)
private:
int itsage;
};animal::animal(int age) : itsage(age)
class horse : virtual public animal // 這個是虛繼承,
virtual void whinny() const
virtual int getheight() const
virtual color getcolor() const
private:
int itsheight;
color itscolor;
};horse::horse(color color,int height, int age) : itscolor(color), itsheight(height), animal(age)
class bird : virtual public animal // 這個是虛繼承,
// 鳥叫
virtual void chirp() const
virtual void fly() const
virtual bool getmigration() const
virtual color getcolor() const
private:
bool itsmigration; // itsmigration 是代表的遷移,
color itscolor;
};bird::bird(color color, bool migrates, int age) : itscolor(color), itsmigration(migrates), animal(age) // 建構函式,
// 多繼承,就是pegasus繼承horse而horse又繼承animal,pegasus繼承bird而又繼承animal, 用虛繼承解決這種二義性的問題,
class pegasus : public horse,public bird // 多繼承,會顯示二義性問題,從horse裡邊繼承的和從bird裡邊繼承的一樣就是二義性問題,
pegasus(color,int,bool,long,int);
~pegasus()
virtual long getnumberbelievers() const
private:
long itsnumberbelievers;
};pegasus::pegasus(color acolor,int height,bool migrates,long numberbelieve, int age)
: horse(acolor,height,age),
bird(acolor,migrates,age),
itsnumberbelievers(numberbelieve),
animal(age) // 這個是重點,
int main()
虛函式與多繼承
問題 假設有兩個基類a和b,它們有乙個相同簽名的虛函式void foo 但是擁有不同的實現。現在要求建立乙個新類c,它同時繼承a和b,也有相同的簽名的函式void foo 並能分別對a和b中的foo函式進行重寫 overwrite 已知條件對應的 如下 include using namespace...
多繼承與虛函式
多繼承 類中protected屬性是指該類中的成員函式可以訪問protected屬性的資料成員,但類物件不可以訪問。而public屬性的資料成員,類的成員函式和類物件都可以訪問。1 公有繼承 2 私有繼承 2 保護繼承 菱形繼承問題 當b c有共同的基類a派生而來,而類d又繼承b和c,這時b,c是d...
C 多繼承與虛繼承
目錄 多繼承與虛繼承以及存在的問題 例子 虛繼承有了多繼承,虛繼承才會有意義 如果有個菱形結構的繼承,爺爺類為a,然後b,c是a的派生類,最後d是b和c的派生類,如果在a中有乙個成員變數a,d去呼叫就會出現訪問不明確,虛繼承就可以解決訪問不明確的這種問題 如果這樣繼承b,c虛繼承了a,virtual...