fork download
  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. public:
  6. virtual void foo() = 0;
  7. };
  8.  
  9. class B
  10. {
  11. public:
  12. virtual void foo() = 0;
  13. };
  14.  
  15. class AA : public A {
  16. public:
  17. virtual void foo() { a_foo(); }
  18. virtual void a_foo() = 0;
  19. };
  20.  
  21. class BB : public B {
  22. public:
  23. virtual void foo() { b_foo(); }
  24. virtual void b_foo() = 0;
  25. };
  26.  
  27. class C : public AA, public BB
  28. {
  29. public:
  30. virtual void a_foo();
  31. virtual void b_foo();
  32. };
  33.  
  34. void C::a_foo() { std::cout<<"C::a_foo"<<std::endl; }
  35. void C::b_foo() { std::cout<<"C::b_foo"<<std::endl; }
  36. void C::A::foo() { std::cout<<"C::A::foo"<<std::endl; }
  37. void C::B::foo() { std::cout<<"C::B::foo"<<std::endl; }
  38.  
  39. int main()
  40. {
  41. C c;
  42. A* pa = &c;
  43. B* pb = &c;
  44.  
  45. c.a_foo();
  46. c.b_foo();
  47. c.A::foo();
  48. c.B::foo();
  49. pa->foo();
  50. pb->foo();
  51. pa->A::foo();
  52. pb->B::foo();
  53. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
C::a_foo
C::b_foo
C::A::foo
C::B::foo
C::a_foo
C::b_foo
C::A::foo
C::B::foo