Created
April 8, 2018 03:10
-
-
Save yjfvictor/ca8094a8fdee016f93396ead7d675b14 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @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