我带着一段我不理解的代码的类声明:
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()方法.
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)