2011-12-13 1144 views

回答

6

这意味着成员函数是纯虚拟,这意味着它根本没有实现。因此,该类不能实例化(它变成“抽象的”),并且它只能用作基类,其派生类必须(最终)实现虚拟成员函数。

一个例子是具有纯虚拟成员函数的抽象Animalfeed():因为每个动物总是一个具体(即派生的)动物的实例,所以不能存在纯粹的抽象动物。尽管动物有某种饲养方式,但没有普遍的基础实施方式,这对每只动物都很常见 - 我们只知道feed()存在,但它必须始终具体地由具体的衍生动物来实施。

(请注意,您可以实际上提供了一个纯虚函数的实现。你仍然不能实例化这样一个类,但是派生类可以调用基函数,这是很少有用的,大概的风格差。 )

+0

如果我不得不猜测,我会说'= 0'反映了类vtable中函数指针为空的事实,但我不知道这实际上是如何实现纯虚函数... –

+1

我认为你的笔记文本需要更大一点,因为可以有一个纯虚拟方法的实现 - 这里的许多其他答案指出,纯虚拟意味着“没有实现”,这是不正确的。 – franji1

+0

@ franji1:也许吧,但它确实不是一件非常有用的事情...... –

1

这就是所谓的“纯虚函数”,它是如何构造抽象类的。有关更多详细信息,请参阅the wikipedia article

要使用您的示例,请在KeyboardListener类中声明keyPressed(void)函数,但未实现 - 即将其视为接口的一部分,并且子类需要实现函数*,但是父类本身不是。不能创建父类的实例 - 父类只能用作指向完全定义的子类的实例的指针。

*话虽这么说,子类不需要来实现它 - 但如果他们不,你不能实例化这些子类要么,只有他们的子孙终于实现keyPressed(void)

1

你必须在派生类中实现这个功能,它是纯粹的虚拟(正如其名字),并没有实现(这是由零,= 0)(有时暗示他们可以在那里实现)。具有纯虚函数的类被称为抽象基类或类似的。他们不能被实例化。

要利用它们,您必须下划分抽象类并在派生类中实现纯虚方法。

1

= 0表示功能为纯虚拟而不是纯虚拟。该= 0推迟定义一个函数体到派生类。

的区别使得其含有纯虚功能的抽象一个不能被实例化,仅延伸到一个适当的类,它可以是类,只要纯虚功能被给予体。这通常与纯虚拟析构函数一起使用,因为每个派生类自动提供一个默认析构函数。

https://stackoverflow.com/a/1219618/866333

注:析构函数,即使它是纯虚,唯一的方法都必须有一个执行情况,以便为它的定义中是有用的类(是纯虚函数可以有实现)。

相关问题