#include <iostream>
class weapon {
public:
int fireRate;
int bulletDamage;
int range;
int activeBullet;
public:
virtual void fire(void) {std::cout << "machine " << '\n';}
virtual ~weapon() {std::cout << "destructor is virtual" << '\n';}
};
class machineGun: public weapon {
public:
void fire(void) {std::cout << "machine gun firing" << '\n';}
~machineGun(void) { std::cout << "machine gun destroyed" << '\n';}
};
class flamer: public weapon {
public:
void fire(void) {std::cout << "flamer firing" << '\n';}
~flamer(void) {std::cout << "flamer destroyed" << '\n';}
};
int main(void)
{
const int count = 2;
weapon *weapons[count];
machineGun *a = new machineGun();
flamer *b = new flamer();
weapons[0] = a;
weapons[1] = b;
weapons[0]->fire();
weapons[1]->fire();
delete a;
delete b;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3Mgd2VhcG9uIHsKCiBwdWJsaWM6CiAgaW50IGZpcmVSYXRlOwogIGludCBidWxsZXREYW1hZ2U7CiAgaW50IHJhbmdlOwogIGludCBhY3RpdmVCdWxsZXQ7CgogcHVibGljOgogIHZpcnR1YWwgdm9pZCBmaXJlKHZvaWQpIHtzdGQ6OmNvdXQgPDwgIm1hY2hpbmUgIiA8PCAnXG4nO30KICB2aXJ0dWFsIH53ZWFwb24oKSB7c3RkOjpjb3V0IDw8ICJkZXN0cnVjdG9yIGlzIHZpcnR1YWwiIDw8ICdcbic7fQp9OwoKY2xhc3MgbWFjaGluZUd1bjogcHVibGljIHdlYXBvbiB7CiBwdWJsaWM6IAogIHZvaWQgZmlyZSh2b2lkKSB7c3RkOjpjb3V0IDw8ICJtYWNoaW5lIGd1biBmaXJpbmciIDw8ICdcbic7fQogIH5tYWNoaW5lR3VuKHZvaWQpIHsgc3RkOjpjb3V0IDw8ICJtYWNoaW5lIGd1biBkZXN0cm95ZWQiIDw8ICdcbic7fQp9OwoKY2xhc3MgZmxhbWVyOiBwdWJsaWMgd2VhcG9uIHsKIHB1YmxpYzogCiAgdm9pZCBmaXJlKHZvaWQpIHtzdGQ6OmNvdXQgPDwgImZsYW1lciBmaXJpbmciIDw8ICdcbic7fQogIH5mbGFtZXIodm9pZCkge3N0ZDo6Y291dCA8PCAiZmxhbWVyIGRlc3Ryb3llZCIgPDwgJ1xuJzt9Cn07CgppbnQgbWFpbih2b2lkKQp7CiAgICBjb25zdCBpbnQgY291bnQgPSAyOwogICAgd2VhcG9uICp3ZWFwb25zW2NvdW50XTsKCiAgICBtYWNoaW5lR3VuICphID0gbmV3IG1hY2hpbmVHdW4oKTsKICAgIGZsYW1lciAgICAgKmIgPSBuZXcgZmxhbWVyKCk7CgogICAgd2VhcG9uc1swXSA9IGE7CiAgICB3ZWFwb25zWzFdID0gYjsKCiAgICB3ZWFwb25zWzBdLT5maXJlKCk7CiAgICB3ZWFwb25zWzFdLT5maXJlKCk7CgogICAgZGVsZXRlIGE7CiAgICBkZWxldGUgYjsKCn0=