抽象类作为参数(接口案例)

时间:2013-04-03 17:52:42

标签: c++ interface abstract-class

我有一个抽象类应该是一个接口,如下所示:

  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)

唯一的选择?有点难看。

1 个答案:

答案 0 :(得分:7)

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

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

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

private:
    IDataSource &source_;
}

然后你可以让DataNeeder的成员函数在source_上运行。正如我所提到的,你也可以使用指针来完成这项任务,但我只想使用“OUT”参数的指针和可以想象为NULL的东西。