2014-01-24 227 views
1

我該如何在C++中進行這種派生? (目前的例子不起作用)C++接口繼承

struct IB 
    { 

    }; 

    struct IDerivedB : public IB 
    { 

    }; 

    struct IA 
    { 
    public: 
     virtual IB Foo(const string& type) = 0; 
    }; 

    struct IDerivedA : public IA 
    { 
    public: 
     virtual IDerivedB Foo(const string& type) override = 0; 
    }; 

謝謝!

+1

什麼是你的編譯器告訴你嗎?我認爲它比「它不工作」說得更多 – undu

回答

6

返回類型的協方差僅適用於指針和引用,這應該工作:

struct IB 
{ 

}; 

struct IDerivedB : public IB 
{ 

}; 

struct IA 
{ 
public: 
    virtual IB* BuildPresenter(const string& type) = 0; 
}; 

struct IDerivedA : public IA 
{ 
public: 
    virtual IDerivedB* BuildPresenter(const string& type) override = 0; 
}; 
+0

太棒了!現在,我可以用shared_ptr而不是常規指針來做到這一點嗎? – Adibe7

+0

@ Adibe7不直接,沒有。但是,您可以使當前的'BuildPresenter'受到保護,並創建一個調用'BuildPresenter'的公共'BuildPresenterShared',將指針包裝在'shared_ptr'中並返回(它不需要是虛擬的)。儘管這對於層次結構中的每個類都必須完成。 –