Skip to content

Instantly share code, notes, and snippets.

@yjfvictor
Created April 8, 2018 03:10
Show Gist options
  • Save yjfvictor/ca8094a8fdee016f93396ead7d675b14 to your computer and use it in GitHub Desktop.
Save yjfvictor/ca8094a8fdee016f93396ead7d675b14 to your computer and use it in GitHub Desktop.
/**
* @brief polymorphism test
* @file polymorphism_test.cpp
* @author yjf_victor
* @date 2018-04-08
* @copyright Creative Commons — CC0 1.0 Universal (https://creativecommons.org/publicdomain/zero/1.0/)
*/
#include <iostream>
#include <vector>
using namespace std;
class Monster
{
public:
virtual void attack() = 0;
virtual ~Monster() {}
};
class FireMonster : public Monster
{
public:
void attack()
{
cout << "Fire attack!" << endl;
}
};
class WaterMonster : public Monster
{
public:
void attack()
{
cout << "Water attack!" << endl;
}
};
class BombMonster : public Monster
{
public:
void attack()
{
cout << "Bomb attack!" << endl;
}
};
void init(vector <Monster *> &monster_vec)
{
monster_vec.push_back(new FireMonster);
monster_vec.push_back(new WaterMonster);
monster_vec.push_back(new BombMonster);
}
void clean_up(vector <Monster *> &monster_vec)
{
for (Monster * pmonster : monster_vec)
delete pmonster;
}
int main()
{
vector <Monster *> monster_vec;
init(monster_vec);
for (Monster * pmonster : monster_vec)
pmonster->attack();
clean_up(monster_vec);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment