c ++:const = 0的方法原型的代码解释

Jér*_*yet 13 c++ virtual

我带着一段我不理解的代码的类声明:

class Weapon
{
  public:
    virtual void attack() const = 0;
};
Run Code Online (Sandbox Code Playgroud)

const = 0部分是什么意思?

Fer*_*eak 15

这是一个纯虚方法(=0),它不应该改变class(const)的数据.您应该在其中一个类中提供实现Weapon!请参阅:虚拟功能和纯虚函数之间的区别

我们希望你从导出Weapon(可视为接口)的具体类,如Axe,Shotgun等...在这里您将提供attack()方法.

  • @ChristopherCreutzig我看过好莱坞电影,shot弹枪有无数的弹壳。.或者也许是因为“弹药”变量从未减少,因为它的常量! (2认同)
  • +1.旁注:类应该定义一个虚拟析构函数,否则它不能真正用作多态基类(因为派生类的对象不能通过`Weapon*`删除). (2认同)

Pet*_*eld 10

const一个成员函数后表明它里面的代码将不修改包含对象(除了在的情况下mutable成员).这很有用,因为如果您不打算在不想要的情况下修改对象,编译器将报告错误.

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

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

class Sword : public Weapon
{
public:
    void attack() const
    {
        // do something...
    }
};
Run Code Online (Sandbox Code Playgroud)