mercredi 16 avril 2014

virtuel - c ++: code explication pour le prototype de méthode avec const = 0 - Stack Overflow


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 ?




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.




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...
}
};


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 ?



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.



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...
}
};

0 commentaires:

Enregistrer un commentaire