#include <iostream>
using namespace std;

struct IBaseInterface {
  virtual void madeMeCool() = 0;
};
     
struct ICoolInterface : IBaseInterface {
  /* тут что-то оригинальное  своё */ 
  virtual void madeMeCool() override {
    cout << "ICoolInterface сделал cool\n";
  }	
};

struct ICoolerInterface: IBaseInterface {
  /* тут что-то совсем другое своё */ 
  virtual void madeMeCool() override {
    cout << "ICoolerInterface тоже сделал cool\n";
  }	
};
     
struct CCoolImpl: virtual ICoolInterface, virtual ICoolerInterface {
  /* всё сделано по правилам, и ничего, как говорится, не предвещало */
  virtual void madeMeCool() override {
    ICoolInterface::madeMeCool();
    ICoolerInterface::madeMeCool();
    cout << "CCoolImpl сделал cool вдогоночку\n";
  }	
};

int main() {
  CCoolImpl cool;
  cool.madeMeCool();
  return 0;
}