fork download
  1. #include <iostream>
  2.  
  3. class A1;
  4. class A2;
  5.  
  6. class A {
  7. public:
  8. virtual void M(A &) = 0;
  9. virtual void M(A1 &) = 0;
  10. virtual void M(A2 &) = 0;
  11. };
  12.  
  13. class A1 : public A {
  14. public:
  15. virtual void M(A &a) { a.M(*this); }
  16. virtual void M(A1 &a) { std::cout << "A1 <- A1\n"; }
  17. virtual void M(A2 &a) { std::cout << "A2 <- A1\n"; }
  18. };
  19.  
  20. class A2 : public A {
  21. public:
  22. virtual void M(A &a) { a.M(*this); }
  23. virtual void M(A1 &a) { std::cout << "A1 <- A2\n"; }
  24. virtual void M(A2 &a) { std::cout << "A2 <- A2\n"; }
  25. };
  26.  
  27. int main()
  28. {
  29. A1 a1;
  30. A2 a2;
  31.  
  32. A &b1 = a1;
  33. A &b2 = a2;
  34.  
  35. b1.M(b1);
  36. b1.M(b2);
  37. b2.M(b1);
  38. b2.M(b2);
  39. }
Success #stdin #stdout 0.02s 2724KB
stdin
Standard input is empty
stdout
A1 <- A1
A1 <- A2
A2 <- A1
A2 <- A2