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派生(可以被认为是接口)具体类,如Axe和Shotgun等…其中,您将提供attack()方法。
- 好的,谢谢,你说得对,因为我的class Weapon是从class AWeapon继承来的。
- 虽然对于Shotgun来说,通常的攻击方法确实改变了目标,所以attack不应该是const。
- @我看过好莱坞电影,猎枪有无限的弹壳。或者可能是因为"弹药"变量从未因其常量而递减!
- 或者可能是默认的iddqd或idkfa。
- + 1。附带说明:类应该定义一个虚拟析构函数,否则它不能真正用作多态的基类(因为派生类的对象不能通过Weapon*删除)。
将const放在成员函数之后,表示其中的代码不会修改包含对象(mutable成员除外)。这很有用,因为如果您无意中修改了对象,编译器会报告一个错误。
= 0与const无关。它与virtual结合使用,表示该函数是纯虚拟的。这意味着它必须被子类覆盖。包含纯虚拟函数的类有时被描述为抽象的,因为它们不能直接实例化。
使用您的示例,您将无法创建Weapon类型的对象,因为attack()函数未定义。您必须创建一个子类,例如:
1 2 3 4 5 6 7 8
| class Sword : public Weapon
{
public:
void attack() const
{
// do something...
}
}; |