簡體   English   中英

多重繼承沖突

[英]Multiple inheritance conflict

我有以下代碼:

class Interface
{
  virtual void method()=0;
};

class Base : public Interface
{
  virtual void method()
  {
    //implementation here
  }
};

class Parent: public Interface
{

};

class Child : public Base, public Parent
{

};

int main()
{
  Child c;//ERROR: cannot instantiate abstract class
}

現在我知道為什么會這樣了,因為我繼承了Parent,所以我不得不再次實現方法。 但是它已經在基類中定義了,我不想為每個子類都覆蓋該定義。 我認為在c ++中有一些擺脫這種情況的標准方法(告訴編譯器應該使用哪個接口的副本),我只是不記得它是什么。

您所說的是所謂的統治

從鏈接的文章中:

class Parent
{
public:
    virtual void function();
};

class Child1 : public virtual Parent
{
public:
    void function();
};

class Child2 : public virtual Parent
{
};

class Grandchild : public Child1, public Child2
{
public:
    Grandchild()
    {
        function();
    }
};

您具有菱形的層次結構,但未使用虛擬繼承。

結果,您在Child類中得到了兩個不同的virtual method()函數。

解決它的一種方法是轉向使用虛擬繼承。 這樣,您將只有一個Child::method()並且不需要兩個實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM