fork download
  1. class SomeBigData
  2. {
  3. public:
  4. SomeBigData() = delete;
  5. explicit SomeBigData(int) {}
  6. private:
  7. char buffer[1024];
  8. };
  9.  
  10. class Interface
  11. {
  12. public:
  13. Interface(int value, SomeBigData& data) : value(value), data(data) {}
  14. ~Interface() {}
  15.  
  16. virtual void function1() = 0;
  17. virtual void function2() = 0;
  18. protected:
  19. Interface(); // No implementation
  20. protected:
  21. int value;
  22. SomeBigData& data;
  23. };
  24.  
  25. class ImpOne : public virtual Interface
  26. {
  27. public:
  28. void function1() override { ++value; }
  29. };
  30.  
  31. class ImpTwo : public virtual Interface
  32. {
  33. public:
  34. void function2() override { --value; }
  35. };
  36.  
  37. class Device : public ImpOne, public ImpTwo
  38. {
  39. public:
  40. Device(SomeBigData& data) : Interface(42, data) {}
  41. };
  42.  
  43. int main()
  44. {
  45. SomeBigData data(42);
  46. Device d(data);
  47. d.function1();
  48. d.function2();
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty