关于virtual:c ++:const = 0的方法原型的代码说明

c++ : code explanation for method prototype with const = 0

我有一个类声明,其中包含一段我不理解的代码:

1
2
3
4
5
class Weapon
{
  public:
    virtual void attack() const = 0;
};

const = 0部分是什么意思?


这是一个纯虚拟方法(=0,不应该更改类(const的数据)。您应该在从Weapon派生的一个类中提供一个实现!参见:虚函数和纯虚函数的区别

您应该从Weapon派生(可以被认为是接口)具体类,如AxeShotgun等…其中,您将提供attack()方法。


const放在成员函数之后,表示其中的代码不会修改包含对象(mutable成员除外)。这很有用,因为如果您无意中修改了对象,编译器会报告一个错误。

= 0const无关。它与virtual结合使用,表示该函数是纯虚拟的。这意味着它必须被子类覆盖。包含纯虚拟函数的类有时被描述为抽象的,因为它们不能直接实例化。

使用您的示例,您将无法创建Weapon类型的对象,因为attack()函数未定义。您必须创建一个子类,例如:

1
2
3
4
5
6
7
8
class Sword : public Weapon
{
public:
    void attack() const
    {
        // do something...
    }
};