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

  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)

唯一的选择?有点丑。

最佳答案

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

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

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

private:
    IDataSource &source_;
}

然后,您可以让DataNeeder的成员函数在source_上进行操作。如前所述,您也可以为该任务使用一个指针,但是我只想为“OUT”参数使用指针,可以想到的是NULL

09-11 20:02