2012-02-28 93 views
1

我有一個類Grandparent,它是由庫提供的。我想定義的Grandparent子類的接口,所以我創建了一個名爲Parent抽象類:將抽象類的參數傳遞給祖父類的構造函數

class Grandparent { 
    public: 
     Grandparent(const char*, const char*); 
}; 

class Parent : public Grandparent { 
    public: 
     virtual int DoSomething() = 0; 
}; 

Grandparent的構造函數有兩個參數。我想我的孩子上課,Child,也有兩個參數的構造函數,而只是通過這些給構造爲Grandparent ...像

class Child : public Parent { 
    public: 
     Child(const char *string1, const char *string2) 
     : Grandparent(string1, string2) 
     {} 

     virtual int DoSomething() { return 5; } 
}; 

當然,Child的構造函數不能調用其祖父類的構造函數,只有它的父類的構造函數。但由於Parent不能有一個構造函數,我怎樣才能將這些值傳遞給祖父母的構造函數?

+0

爲什麼你認爲'Parent'不能有一個構造函數? – 2012-02-28 02:22:30

回答

3

Parent當然可以有一個構造函數。它必須,如果它打算用任何參數調用Grandparent構造函數。

沒有什麼東西禁止抽象類具有構造函數,析構函數或任何其他類型的成員函數。它甚至可以有成員變量。

只需將構造函數添加到Parent即可。在Child中,您將調用Parent構造函數;你不能用構造函數調用「跳過一代」。

class Parent: public Grandparent 
{ 
public: 
    Parent(char const* string1, char const* string2): 
    Grandparent(string1, string2) 
    { } 
    virtual int DoSomething() = 0; 
}; 
+0

出於某種原因,我認爲抽象類不能有構造函數。當然你的解決方案效果很好。謝謝! – bdesham 2012-02-28 05:56:46

+0

也許你正在考慮使用其他語言的* interfaces *,例如Java,C#或Delphi。 C++沒有單獨的接口類型。 – 2012-02-28 06:03:09

+0

是的,我來自Objective-C,我仍然在研究接口和抽象基類之間的差異。 – bdesham 2012-02-28 18:55:14

相關問題