多繼承與虛函式

2021-07-10 19:53:20 字數 1624 閱讀 8763

#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...