在声明方法时,C ++中= 0的含义是什么?

时间:2011-12-13 01:34:37

标签: c++ visual-c++

此声明的= 0部分意味着什么?

class KeyboardListener
{
  public:
    virtual bool keyPressed(void) = 0; 
} 

4 个答案:

答案 0 :(得分:6)

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

一个示例是带有纯虚拟成员函数Animal的抽象feed()类:由于每个动物总是具体(即派生)动物的实例,因此不存在纯粹的抽象动物。虽然动物有一些喂食方式,但每种动物都没有通用的基本实施方法 - 我们只知道feed()存在,但必须始终由具体的衍生动物具体实施。

(注意你可以实际提供纯虚函数的实现。你仍然无法实例化这样的类,但派生类可以调用基函数。这很少见有用且可能很差的风格。)

答案 1 :(得分:1)

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

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

*话虽如此,子类不是必需的来实现它 - 但是如果它们没有,你就无法实例化那些的子类,只有它们的最终实现keyPressed(void)的后代。

答案 2 :(得分:1)

你必须在派生类中实现这个功能,它是纯虚拟(如名称所示)并且没有实现(由零隐含, = 0 )(有些情况下他们可以实现)。具有纯虚函数的类称为抽象基类等。它们无法实例化。

要使用它们,您必须提取抽象类并在派生类中实现纯虚方法。

答案 3 :(得分:1)

= 0表示函数为纯虚拟,而不是普通虚拟。 = 0将函数体定义为派生类。

这种区别使得包含纯虚拟函数的类成为抽象一个无法实例化的类,只能扩展到一个合适的类,只要纯虚拟功能被赋予一个体。这通常与纯虚拟析构函数一起使用,因为每个派生类都会自动提供默认的析构函数。

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

  

注意:析构函数是唯一的方法,即使它是纯虚拟的,也必须有一个实现,以便它定义的类是有用的(是纯虚函数可以有实现)。