Pregunta

I hava a class declaration with a piece of code that I do not understand :

class Weapon
{
  public:
    virtual void attack() const = 0;
};

What does the const = 0 part means ?

¿Fue útil?

Solución

This is a pure virtual method (=0) which is not supposed to change the data of the class (const). You should provide an implementation in one of the classes deriving from Weapon! See this: Difference between a virtual function and a pure virtual function

You are expected to derive from the Weapon (can be considered interface) concrete classes, such as Axe , Shotgun, etc ... where you will provide the attack() method.

Otros consejos

Putting const after a member function indicates that the code inside it will not modify the containing object (except in the case of mutable members). This is useful because the compiler will report an error if you accidentally modify the object when you didn't intend to.

The = 0 is not related to const. It's used in conjunction with virtual to indicate that the function is pure virtual. That means it must be overridden by a sub-class. Classes containing pure virtual functions are sometimes described as abstract because they cannot be directly instantiated.

Using your example, you would not be able to create an object of type Weapon, because the attack() function is not defined. You would have to create a sub-class, such as:

class Sword : public Weapon
{
public:
    void attack() const
    {
        // do something...
    }
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top