多重繼承 virtual

2021-05-08 22:10:11 字數 818 閱讀 9545

虛擬繼承可以使繼承自自己的class避免重複包含subobject of parent's parent,既包括member data,也包括member function.

如果不使用virtual繼承,那在多重繼承的時候就會有多份copy在物件中,那呼叫parnent member function時就不知道呼叫那乙份copy

//#include "stdafx.h"

using namespace std;

class stuff

~stuff()

string& get_name(void)

string set_name(string &name)

private:

string _name;

};class car : virtual public stuff

~car()

string get_special(void )

private:

string _tyre;

};class ship : virtual public stuff

~ship()

string get_special(void )

private:

string _quant;

};class shipcar : public ship, public car

~shipcar()

};void test1(void)

void test2(void)

void test3(void)

int _tmain(int argc, _tchar* argv)

virtual繼承和不繼承

用virtual修飾的虛函式,用來繼承重寫,沒有virtual修飾的,取決於父類 定義 父類 x new 子類 首先父類不能呼叫子類的函式,自能呼叫本身的函式,所以,只有兩種情況,1.無virtual修飾,呼叫本身函式。2.有virtual修飾,呼叫子類重寫的函式 定義 子類 y new 子類 子類...

多重繼承 C 中的多重繼承

多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...

多重繼承(菱形繼承)

多重繼承 經典的是菱形繼承,如圖。菱形繼承將會產生的問題 把基類a中的成員變數通過b和c兩次繼承至d。d的繼承結構 可以看到,ma被繼承兩次至d 那麼將如何解決這個問題呢?採用虛繼承的方法,將基類a中的ma直接繼承至d。如下 class a int ma class b virtual public...