Virtual методы override
позволяет правильно использовать перегрузки методов в дочерних классах через указатели
class weapon // основной класс оружия
{
public:
virtual void shoot()
{
cout << "действие!" << endl;
}
};
class pistol : public weapon // пистолет
{
public:
void shoot() override
{
cout << "выстрел" << endl;
}
};
class knife : public weapon // нож
{
public:
void shoot() override
{
cout << "удар ножом" << endl;
}
};
class Player // КЛАСС ИГРОКА
{
public:
void shoot(weapon* gun) // передаем ссылку на любой объект вооружения,
{ // вместо бесконечных перегрузок под каждое оружие
gun->shoot();
}
};
int main()
{
knife knife; // объекты
pistol pistol;
Player player;
player.shoot(&pistol); // мы можем передавать объекты унаследованые от weapon
}От класса weapon наследуются типы вооружения pistol и knife , они имеют разные реализации унаследованного метода shoot() .
В классе игрока player мы хотим передавать указатель на любой объект унаследованный от weapon , что бы передавать любой объект оружия и использовать один и тот же метод выстрела, вместо перегрузки метода под каждое оружие, т.к в игре может быть огромное кол-во вооружения.
Если бы мы не использовали virtual, то при передаче оружия через указатель - метод всегда выводил бы "действие!", т.к он бы не понимал, что нужно использовать перегрузку метода в конкретном объекте.

PreviousВызов определенного конструктора родительского класса в наследникеNextОшибка с моментальным закрытием консоли из .exe
Last updated