2013-04-03 48 views
1

我應該是一個接口的抽象類,像這樣:抽象類作爲參數(接口的情況下)

class IDataSource 
    { 
    public: 
     virtual double getMeThatDouble() = 0; 
    } 

和像

class IDataSourceStreamer 
    { 
    public: 
     double getMeThatDouble() 
      { 
      //implementation 
      } 
    } 

點一些實現的是,我想用它作爲初始參數在其他類的構造函數一樣

class DataNeeder 
{ 
    public: 
     explicit DataNeeder(IDataSource); 
} 

和來這裏的麻煩 - "parameter of abstract class type is not allowed"

我明白,由於特殊原因禁止使用抽象類是不可能的。所以我該怎麼做?是一種像

IDataSource.FeedThat(DataNeeder) 

一個唯一的選擇?有點醜。

回答

6

您需要將抽象類型作爲參考或指針傳遞。例如:

class DataNeeder { 
public: 
    explicit DataNeeder(IDataSource &source) : source_(source) { 
    } 

    void someMethod() { 
     double x = source_.getMeThatDouble(); 
     // ... 
    } 

private: 
    IDataSource &source_; 
} 

然後你就可以有DataNeeder的成員函數上source_操作。正如我所提到的,你也可以使用一個指針來完成這個任務,但是我只想用「OUT」參數的指針和可以設想的東西爲NULL

+0

工作得很好,謝謝。 –