所以,我有这个多态层次结构:
ClassA
Is not abstract, no pure virtual functions, but a few virtual functions
ClassB:public ClassA
Defines an extended interface for a certain type of subclass;
is abstract with pure virtual functions
ClassC:public ClassB
Usable class, no more subclassing
协议如下,我将拥有以下物品ClassA
and ClassC
一起放入容器中并进行迭代。为了执行此迭代,存在一个非纯虚函数ClassA
但只是空的{}
;也就是说,它是空的,仅当迭代遇到ClassC
在这种情况下它被调用,否则它什么也不做。我不能让它是纯粹的,否则我不能拥有对象ClassA
.
但要确保ClassC
实际上确实实现了该函数,迫使该类的用户这样做,我使该函数成为纯虚函数ClassB
.
这是可以接受的吗?如果我采用非纯虚函数,将其变为纯函数,然后再次将其变为非纯函数,那么什么都不会“破坏”ClassC
?
如果按照您在解释中提出的方式实施,那就没问题了。在不深入讨论抽象基类和虚函数的整个部分的情况下,该标准规定:
C++§10.4p2
抽象类是只能用作其他类的基类的类;不能创建抽象类的任何对象,除非作为派生类的子对象。如果一个类至少有一个纯虚函数,则该类是抽象的。 [ 注意:这样的函数可能会被继承:见下文。 — 尾注] 虚函数通过在类定义的函数声明中使用 pure 说明符 (9.2) 来指定为 pure。仅当使用或如同使用 (12.4)、qualified-id 语法 (5.1) 调用时才需要定义纯虚函数
上面引用的“以下”引出了此注释:
C++11§10.4p5
[Note:抽象类可以从非抽象类派生,纯虚函数可以覆盖非纯虚函数。 -end note]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)