【发布时间】:2011-08-08 22:21:14
【问题描述】:
你好,
我来自 C# 背景,没有很多 C++ 经验。为了生成干净的代码,我尝试分离实现和接口,并尽可能使用继承。当我尝试将典型的 C# 概念应用于 C++ 时,我遇到了一个迄今为止我无法解决的问题。我认为这对于一个有经验的 C++ 程序员来说可能是微不足道的,但它已经让我发疯了很长一段时间。
首先我声明一个基类(它现在不包含逻辑,但将来会)
class PropertyBase : public IProperty
{
};
然后我为属性定义一个接口
class IProperty
{
public:
virtual ~IProperty() {};
virtual PropertyBase correct(const ICorrector &corrector) = 0;
virtual PropertyBase joinWith(const PropertyBase &partner, const IRecombinator &recombinator) = 0;
};
这就是问题所在:编译器为两个虚函数返回错误,表示不允许声明返回抽象类的函数。当然我不想返回PropertyBase 类型的对象。我想声明其他继承自 PropertyBase 的类,它们返回自己的实例。
现在我读到了一种可能的解决方法是像这样修改IProperty 以返回指针:
class IProperty
{
public:
virtual ~IProperty() {};
virtual PropertyBase* correct(const ICorrector &corrector) = 0;
virtual PropertyBase* joinWith(const PropertyBase &partner, const IRecombinator &recombinator) = 0;
};
但是,如果可能的话,我想避免这种情况,以防止内存泄漏。如果有人能更好地解决这个问题,那就太好了。
非常感谢
【问题讨论】:
标签: c++ class function virtual abstract