我有一个抽象类应该是一个接口,如下所示:
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)
唯一的选择?有点难看。
答案 0 :(得分:7)
您需要将抽象类型作为引用或指针传递。例如:
class DataNeeder {
public:
explicit DataNeeder(IDataSource &source) : source_(source) {
}
void someMethod() {
double x = source_.getMeThatDouble();
// ...
}
private:
IDataSource &source_;
}
然后你可以让DataNeeder
的成员函数在source_
上运行。正如我所提到的,你也可以使用指针来完成这项任务,但我只想使用“OUT”参数的指针和可以想象为NULL
的东西。