fork download
  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. public:
  6. virtual void func() = 0;
  7. };
  8.  
  9. class B
  10. {
  11. private:
  12. void func1() { std::cout << "func1\n"; };
  13. void func2() { std::cout << "func2\n"; };
  14.  
  15. public:
  16. class C1 : public A
  17. {
  18. private:
  19. B &m_b;
  20. public:
  21. C1(B &b) : m_b(b) {}
  22. void func() override { m_b.func1(); }
  23. };
  24.  
  25. class C2 : public A
  26. {
  27. private:
  28. B &m_b;
  29. public:
  30. C2(B &b) : m_b(b) {}
  31. void func() override { m_b.func2(); }
  32. };
  33. };
  34.  
  35. void doSomeStuff(A &a)
  36. {
  37. a.func();
  38. }
  39.  
  40. int main()
  41. {
  42. B b;
  43.  
  44. {
  45. B::C1 c(b);
  46. doSomeStuff(c);
  47. }
  48.  
  49. {
  50. B::C2 c(b);
  51. doSomeStuff(c);
  52. }
  53.  
  54. return 0;
  55. }
Success #stdin #stdout 0s 4548KB
stdin
Standard input is empty
stdout
func1
func2