Classes

#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 Statisticpublic 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;