#include <iostream>
#include <vector>
using namespace std;
//In C++ there are no events type
class GameListener {
public:
virtual void gameStarted(string name) {};
};
class Game {
private:
vector<GameListener *> listeners{};
public:
void addListener(GameListener *listener) {
listeners.push_back(listener);
}
string name;
void start() {
for (auto listener : listeners) {
listener->gameStarted(name);
}
}
Game(string name) {
this->name = name;
}
};
class Statistic: public GameListener {
public:
int startsCount = 0;
string lastGame = "";
virtual void gameStarted(string name) {
startsCount += 1;
lastGame = name;
}
};
Statistic statistic;
Game heroes("Heroes");
Game doom("Doom");
//subscribe to events
heroes.addListener(&statistic);
doom.addListener(&statistic);
doom.start();
heroes.start();
//statistic.lastGame is "Heroes"
//statistic.startsCount is 2
cout << "lastGame: " << statistic.lastGame << endl;
cout << "startsCount is " << statistic.startsCount;