Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- //этот класс является абстрастрактным, потому что содержит в себе чисто вирутальную функцию
- class Weapon
- {
- public:
- //чисто виртуальная функция
- virtual void Shoot() = 0;
- };
- //этот класс наследует класс Weapon, который является просто "коробкой" для остальных классов
- class Gun : public Weapon
- {
- public:
- //создание виртуальной функции
- virtual void Shoot()
- {
- std::cout << "BANG!" << std::endl;
- }
- };
- class MachineGun : public Gun
- {
- public:
- // перегрузка унаследованного виртуального метода класса A
- //ключевое слово override нужно для корректой обработки ошибок виртуальных методов, связанных с невалидной сигнатурой
- void Shoot() override
- {
- std::cout << "BANG! BANG! BANG! BANG!" << std::endl;
- }
- };
- //базука не относится к Gun , поэтому она наследует класс Weapon
- class Bazooka : public Weapon
- {
- public:
- void Shoot() override
- {
- std::cout << "BUM" << std::endl;
- }
- };
- // класс Knife наследует класс Weapon, так как не является огнестрельным оружием
- class Knife : public Weapon
- {
- public:
- void Shoot() override
- {
- std::cout << "Oh" << std::endl;
- }
- };
- class Player
- {
- public:
- void Shoot(Weapon *weapon)
- {
- //обращение к одной из перегрузок виртуальной функции
- weapon->Shoot();
- }
- };
- int main(int argc, char *argv[])
- {
- setlocale(LC_ALL, "Rus");
- srand(time(NULL));
- //создание необходимых объектов
- Gun gun;
- MachineGun machinegun;
- Bazooka bazooka;
- Knife knife;
- Player player;
- //вызов метода, принимающего в качестве параметра ссылку на объект класса Gun или наследника
- player.Shoot(&machinegun);
- player.Shoot(&gun);
- player.Shoot(&bazooka);
- player.Shoot(&knife);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement