virtual-inheritance

    0熱度

    1回答

    我想要掌握C++中多重虛擬/非虛擬繼承的概念。如果我正確地理解,如果B類和C類實際上從類A繼承,它們共享一種單例對象,即它們都訪問一個公共對象A的相同字段。多重繼承將爲任何B和C對象創建單獨的A對象。 考慮到上述因素,是否有人會如此善良,並將其呈現在簡單實用的環境中?爲什麼在多數繼承首先,然後爲什麼虛擬/非虛擬? 謝謝。

    2熱度

    1回答

    試圖在C更深入的遺傳機理分析 ++我偶然發現了下面的例子: #include<iostream> using namespace std; class Base { public: virtual void f(){ cout << "Base.f" << endl; } }; class Left : public virtual Base {

    3熱度

    3回答

    我正在編輯這個問題,以使其更具可讀性和較少人爲操作。我已經設法用下面的一小段代碼來複制我的問題。那麼問題是:爲什麼這會在~A()中的「delete p」行上的_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)斷言失敗? class A; class I { public: I(const A *p) : parent_(p) {} virt

    1熱度

    3回答

    如果我有像 class Base1 {}; class Base2 {}; class Derived : public Base1, public Base2 {}; 然後構造函數調用對製作的派生類對象順序 Base1 Base2 即他們的順序出現在 class Derived : public Base1, public Base2 {}; 但如果我將其更改爲 類Deri

    2熱度

    2回答

    我正在開發一個用於內部和外部使用的api。在Visual Studio 10. 我有一個虛擬基類IA和派生的虛擬基類IB。我用A類實現IA,然後從B中推導出IB的具體實現。這對我的理解是經典的鑽石問題。所以我做IA的繼承虛擬與同爲A的燒烤繼承,但我得到一個警告c4250 (warning C4250: 'B' : inherits 'A::A::AnInt' via dominance) 而這個警

    4熱度

    3回答

    class foo : public virtual bar, public virtual kung { // implementation of the method of the above inherited class }; 酒吧和功夫類是包含在foo的CLAS的內部實現純虛方法的抽象類.. 什麼用的呢?

    0熱度

    1回答

    下面是代碼: class Vehicle { public : Vehicle() { cout << " Vehicle Constructor " << endl ; } virtual ~ Vehicle() { cout << " Vehicle Destructor " << endl ;

    62熱度

    1回答

    我不明白爲什麼在下面的代碼中,當我instanciate類型爲daughter的對象時,默認的grandmother()構造函數被調用? 我認爲應該調用grandmother(int)構造函數(遵循我的mother類構造函數的規範),或者由於虛擬繼承,此代碼根本不應編譯。 這裏編譯器在我的後面默默地調用grandmother默認構造函數,而我從來沒有要求它。 #include <iostream>

    1熱度

    1回答

    我試圖更好地理解虛擬繼承在實際中如何工作(即,不是按照標準,而是在像g++這樣的實際實現中)。真正的問題在底部,用粗體表達。 所以,我給自己建一個繼承圖,其中有除其他事項外,這些簡單類型: struct A { unsigned a; unsigned long long u; A() : a(0xAAAAAAAA), u(0x1111111111111111ull)

    7熱度

    5回答

    讓我們假設一些(舊的)代碼,這不能觸及,申報 struct B{ public: void f(){} }; ,讓我們假設有 struct A{ public: virtual void f()=0; }; 是有可能使一個子類調用B ::˚F沒有顯式調用F(),即代替 struct C: public A, public B{ void f(){