这里有一点否定的怀疑(另一个来自我:P)
关于我正在阅读的一本书:
= 0
。virtual void f() = 0;
这样您就不需要在ABC中定义它,但派生类必须实现它自己的版本。void f() = 0;
这种方式你需要在ABC中定义方法,派生类可以像这样使用它。 ABC需要这种方法,其方法通常由其派生类应用。如果以上所有要点都是真的,我不明白的是:什么是虚拟方法?
因为void f() = 0;
对我来说是常规方法。 ABC将定义它,派生对象将使用ABC的定义,就像任何其他公共方法一样。是否存在对这两个实例具有吸引力的虚拟方法的定义?
纯虚函数或纯虚方法是虚函数 这是必需由派生类实现的 抽象
此定义是从本网站的另一个问题中挑选出来的。所以我的猜测是我读的那本书错了吗? void f() = 0;
表示该类是ABC,但它不是纯虚方法。有人可以证实这一点或向我解释一下吗?
答案 0 :(得分:8)
void f() = 0;
除非基类将f()
定义为virtual
,否则错误。例如:
class A
{
public:
virtual void f() = 0;
};
class B : A
{
void f() = 0;
}
上述内容是合法的,因为f()
本质上是virtual
。否则,没有。
tl; dr 您不能将非虚拟方法声明为纯,但方法可以是虚拟的,而无需显式指定virtual
关键字(通过继承)。我希望这是本书所讨论的内容,否则我倾向于说这是一本糟糕的坏书。
答案 1 :(得分:0)
函数(C ++没有方法)如果标记为virtual
或者它覆盖基类中的虚函数,则为虚拟。可以使用= 0
将虚拟功能标记为“纯虚拟”;这意味着不必定义函数,直接从类派生的类也是抽象类,除非它们覆盖该函数(以及任何其他纯虚函数)。覆盖函数也可以使用= 0
使覆盖纯虚拟。