Advertisement
Ejejejejejjr

Полиморфизм

Dec 26th, 2020
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. class Gun
  5. {
  6.   public:
  7.     //создание  виртуальной функции
  8.     virtual void Shoot()
  9.     {
  10.         std::cout << "BANG!" << std::endl;
  11.     }
  12. };
  13.  
  14. class MachineGun : public Gun
  15. {
  16.   public:
  17.     // перегрузка унаследованного виртуального метода класса A
  18.     //ключевое слово override нужно для корректой обработки ошибок виртуальных методов, связанных с невалидной сигнатурой
  19.     void Shoot() override
  20.     {
  21.         std::cout << "BANG! BANG! BANG! BANG!" << std::endl;
  22.     }
  23. };
  24.  
  25. class Player
  26. {
  27.   public:
  28.     void Shoot(Gun *gun)
  29.     {
  30.         //обращение к одной из перегрузок виртуальной функци
  31.         gun->Shoot();
  32.     }
  33. };
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37.     setlocale(LC_ALL, "Rus");
  38.     srand(time(NULL));
  39.  
  40.     Gun gun;
  41.     MachineGun machinegun;
  42.  
  43.     //объект-указатель на ссылку на объект этого класса
  44.     Gun *pGun = &gun;
  45.     MachineGun *pMachineGun = &machinegun;
  46.     //вызов методов этих классов
  47.     pGun->Shoot();
  48.     pMachineGun->Shoot();
  49.  
  50.     std::cout << "\n\n\n";
  51.  
  52.     Player player;
  53.     //вызов метода, принимающего в качестве параметра ссылку на объект класса Gun или наследника
  54.     player.Shoot(&machinegun);
  55.     player.Shoot(&gun);
  56.  
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement