Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- class Gun
- {
- 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;
- }
- };
- class Player
- {
- public:
- void Shoot(Gun *gun)
- {
- //обращение к одной из перегрузок виртуальной функци
- gun->Shoot();
- }
- };
- int main(int argc, char *argv[])
- {
- setlocale(LC_ALL, "Rus");
- srand(time(NULL));
- Gun gun;
- MachineGun machinegun;
- //объект-указатель на ссылку на объект этого класса
- Gun *pGun = &gun;
- MachineGun *pMachineGun = &machinegun;
- //вызов методов этих классов
- pGun->Shoot();
- pMachineGun->Shoot();
- std::cout << "\n\n\n";
- Player player;
- //вызов метода, принимающего в качестве параметра ссылку на объект класса Gun или наследника
- player.Shoot(&machinegun);
- player.Shoot(&gun);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement