fork(1) download
  1. #include <string>
  2. #include <iostream>
  3.  
  4. class BaseIf
  5. {
  6. public:
  7. virtual ~BaseIf() {}
  8.  
  9. virtual std::string getName() = 0;
  10. };
  11.  
  12. class IntIf : public virtual BaseIf
  13. {
  14. public:
  15. virtual ~IntIf() {}
  16.  
  17. virtual int getValue() = 0;
  18. };
  19.  
  20. class FloatIf : public virtual BaseIf
  21. {
  22. public:
  23. virtual ~FloatIf() {}
  24.  
  25. virtual float getValue() = 0;
  26. };
  27.  
  28. class BaseBlock : public virtual BaseIf
  29. {
  30. public:
  31. std::string getName () override { return "whoa dude"; }
  32. };
  33.  
  34. class IntBlock : public virtual IntIf
  35. {
  36. public:
  37. int getValue() override { return 42; }
  38. };
  39.  
  40. class BaseImpl : public BaseBlock {};
  41.  
  42. class IntImpl : public BaseBlock, public IntBlock {};
  43.  
  44. int main()
  45. {
  46. BaseIf* bif = new IntImpl;
  47. std::cout << bif->getName() << "\n";
  48.  
  49. IntImpl iimp;
  50. std::cout << iimp.getName() << "\n";
  51.  
  52. }
Success #stdin #stdout 0s 4524KB
stdin
Standard input is empty
stdout
whoa dude
whoa dude