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)

唯一的选择?有点丑

4

1 回答 1

10

您需要将抽象类型作为引用或指针传递。例如:

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

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

private:
    IDataSource &source_;
}

然后你就可以对DataNeeder's 的成员函数进行操作了source_。正如我所提到的,您也可以将指针用于此任务,但我喜欢仅将指针用于“OUT”参数和可以想象的东西NULL

于 2013-04-03T17:53:48.320 回答