【发布时间】:2018-08-23 08:56:40
【问题描述】:
我希望这不会成为“重复”,因为关于(纯)虚拟解构有很多问题(是的,我确实知道)。
我想用一堆方法构建一个“接口”(-> 抽象类),可以重新实现,但不需要。所以我喜欢:
class IBase
{
public:
virtual bool doThis() { return true; }
virtual bool doThat() { return true; }
}
我给出了一堆实现,有些使用doThis,有些使用doThat。这就是为什么“接口”方法只是虚拟的而不是纯粹的。喜欢:
class Derived1 : public IBase
{
public:
bool doThis() override { return doSomething(); }
}
class Derived2 : public IBase
{
public:
bool doThat() override { return doSomethingElse(); }
}
问题:这个IBase 类是可实例化的,它一定不能实例化,因为它什么都不做......
我的问题:定义一个纯虚拟析构函数virtual ~IBase() = 0 使其无法实例化就足够了吗?
和/或我是否需要删除标准构造函数IBase() = delete?
也许我最终因为想了太久而变成了代码盲,所以我会提前原谅。
编辑:我最初的问候被删了(由我或 SO),所以我现在或永远不会向你们打招呼:嘿伙计们!
【问题讨论】:
-
“它不能”这是一个完全任意的要求。 “因为它什么都不做”数字零、空集、恒等函数在某种意义上都“什么都不做”,但我们仍然保留它们。
标签: c++11 interface abstract-class