fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Base;
  5. class A;
  6. class B;
  7.  
  8. class Base {
  9. public:
  10. const char* type;
  11. int value;
  12. virtual bool operator==(Base&) = 0;
  13. virtual bool equals(A*) = 0;
  14. virtual bool equals(B*) = 0;
  15. protected:
  16. Base(){}
  17. };
  18.  
  19. class A : public Base {
  20. public:
  21. const char* type;
  22. int value;
  23. A(int value = 0) : type("A"), value(value) {}
  24.  
  25. virtual bool operator==(Base& base) {
  26. return base.equals(this);
  27. }
  28. protected:
  29. virtual bool equals(A* a){
  30. return (type == a->type && value == a->value);
  31. }
  32. virtual bool equals(B* b){
  33. return false;
  34. }
  35. };
  36. class B : public Base {
  37. public:
  38. const char* type;
  39. int value;
  40. B(int value = 0) : type("B"), value(value) {}
  41.  
  42. virtual bool operator==(Base& base) {
  43. return base.equals(this);
  44. }
  45. protected:
  46. virtual bool equals(A* a){
  47. return false;
  48. }
  49. virtual bool equals(B* b){
  50. return (type == b->type && value == b->value);
  51. }
  52. };
  53.  
  54. int main() {
  55. A a(5);
  56. A a2(5);
  57. B b(5);
  58. Base *base_a = &a;
  59. Base *base_a2 = &a2;
  60. Base *base_b = &b;
  61.  
  62. cout << (*base_a == *base_b) << endl;
  63. cout << (*base_a == *base_a2) << endl;
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
0
1