【发布时间】:2014-02-06 21:43:49
【问题描述】:
我有一个类声明,其中包含一段我不理解的代码:
class Weapon
{
public:
virtual void attack() const = 0;
};
const = 0 部分是什么意思?
【问题讨论】:
我有一个类声明,其中包含一段我不理解的代码:
class Weapon
{
public:
virtual void attack() const = 0;
};
const = 0 部分是什么意思?
【问题讨论】:
这是一个纯虚方法 (=0),它不应该更改类的数据 (const)。您应该在派生自Weapon 的类之一中提供实现!看到这个:Difference between a virtual function and a pure virtual function
您应该从Weapon(可以被认为是接口)具体类派生,例如Axe、Shotgun等......您将在其中提供attack()方法。
【讨论】:
class Weapon 继承自 class AWeapon。
Shotgun,通常的攻击方式确实会改变对象,所以attack不应该是const。
iddqd 或 idkfa :)
Weapon* 删除派生类的对象)。
将const 放在成员函数之后表示其中的代码不会修改包含对象(mutable 成员的情况除外)。这很有用,因为如果您无意中修改了对象,编译器会报告错误。
= 0 与 const 无关。它与virtual 一起使用,表示该函数是纯虚拟。这意味着它必须被子类覆盖。包含纯虚函数的类有时被描述为抽象,因为它们不能被直接实例化。
使用您的示例,您将无法创建 Weapon 类型的对象,因为未定义 attack() 函数。您必须创建一个子类,例如:
class Sword : public Weapon
{
public:
void attack() const
{
// do something...
}
};
【讨论】: