fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. // B is abstract
  5. class B
  6. {
  7. public:
  8. virtual int getDefault() = 0;
  9. };
  10.  
  11. class C : public B
  12. {
  13. public:
  14. int getDefault() override { return 1; }
  15. };
  16.  
  17. class D : public B
  18. {
  19. public:
  20. int getDefault() override { return 5; }
  21. };
  22.  
  23. class ObjectDisplay
  24. {
  25. public:
  26. ObjectDisplay (B& b) : object (b) {}
  27.  
  28. void someFunction()
  29. {
  30. const auto result = object.getDefault();
  31. // do something
  32. std::cout << result << std::endl;
  33. }
  34.  
  35. private:
  36. B& object;
  37. };
  38.  
  39. class Container
  40. {
  41. public:
  42. void addDisplay()
  43. {
  44. displays.push_back (ObjectDisplay (c));
  45. displays.push_back (ObjectDisplay (d));
  46. }
  47.  
  48. void someFunction()
  49. {
  50. for (auto &display : displays)
  51. display.someFunction();
  52. }
  53.  
  54. private:
  55. C c;
  56. D d;
  57. std::vector<ObjectDisplay> displays;
  58. };
  59.  
  60. int main() {
  61. Container c;
  62. c.addDisplay();
  63. c.someFunction();
  64. return 0;
  65. }
Success #stdin #stdout 0s 5520KB
stdin
Standard input is empty
stdout
1
5