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

C++ 抽象类作为参数(接口案例),c++,interface,abstract-class,C++,Interface,Abstract Class,我有一个抽象类,应该是一个接口,如下所示: class IDataSource { public: virtual double getMeThatDouble() = 0; } 一些实现如 class IDataSourceStreamer { public: double getMeThatDouble() { //implementation }

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

  class IDataSource
    {
    public:
        virtual double getMeThatDouble() = 0;
    }
一些实现如

 class IDataSourceStreamer
    {
    public:
        double getMeThatDouble()
          {
            //implementation
          }
    }
关键是我想在其他类的构造函数中使用它作为初始参数,比如

class DataNeeder
{
  public:
       explicit DataNeeder(IDataSource);
}
问题来了——
“抽象类类型的参数是不允许的”

我知道这是因为特殊的原因而被禁止的——单独使用抽象类是不可能的。那我该怎么办?方法是什么

IDataSource.FeedThat(DataNeeder)

唯一的选择?有点难看。

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

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

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

private:
    IDataSource &source_;
}

然后您可以让
DataNeeder
的成员函数在
source\uu
上运行。正如我所提到的,您也可以使用指针来完成此任务,但我只喜欢使用指针来表示“OUT”参数和可以想象为
NULL

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

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

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

private:
    IDataSource &source_;
}
然后您可以让
DataNeeder
的成员函数在
source\uu
上运行。正如我提到的,您也可以使用指针来完成此任务,但我只喜欢使用指针来表示“OUT”参数和可以想象为
NULL
的内容