【发布时间】:2011-08-28 02:33:28
【问题描述】:
class ClassA {
public:
ClassA() {} // when this function must be provided
virtual ~ClassA() = 0 {}
};
class ClassB : public ClassA
{
// ...
};
我想知道什么时候必须提供抽象基类的默认构造函数。
【问题讨论】:
-
我不认为作为一个基础抽象类与它有任何关系。所以我猜答案是“在通常需要的时候”,例如当你需要能够构造带参数和不带参数的类时。
-
另外,你不能在纯虚函数上拥有一个主体 (
= 0 { })。 -
@Seth Carnegie:Actually, you can have a body on a pure virtual function。 (名为“1. Pure Virtual Destructor”的部分在这里特别重要。)
-
@In 哇,什么大火。
= 0那么到底有什么不同呢?我认为这意味着子类必须实现它,因为基类没有。 -
@Seth Carnegie:类仍然必须在实例化之前覆盖所有纯虚函数,就像往常一样。但是您仍然可以为要调用的子类提供定义。阅读链接的 GotW #31 文章,了解为什么有人会这样做。
标签: c++