Question

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 ?

Was it helpful?

Solution

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.

OTHER TIPS

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...
    }
};
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top