fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. struct A {
  6. virtual void print(){ cout << "A\n"; }
  7. void output(){ cout << "A\n"; }
  8. };
  9.  
  10. struct B : public A {
  11. virtual void print(){ cout << "B\n"; }
  12. void output(){ cout << "B\n"; }
  13. };
  14.  
  15. struct C : public A {
  16. virtual void print(){ cout << "C\n"; }
  17. void output(){ cout << "C\n"; }
  18. };
  19.  
  20. struct B1 : public B {
  21. virtual void print(){ cout << "B1\n"; }
  22. void output(){ cout << "B1\n"; }
  23. };
  24.  
  25. struct B2 : public B {
  26. virtual void print(){ cout << "B2\n"; }
  27. void output(){ cout << "B2\n"; }
  28. };
  29.  
  30. struct C1 : public C {
  31. virtual void print(){ cout << "C1\n"; }
  32. void output(){ cout << "C1\n"; }
  33. };
  34.  
  35. struct C11 : public C1 {
  36. virtual void print(){ cout << "C11\n"; }
  37. void output(){ cout << "C11\n"; }
  38. };
  39.  
  40. int main() {
  41. vector<A*> children_;
  42. A a;
  43. B b;
  44. B1 b1;
  45. B2 b2;
  46. C c;
  47. C1 c1;
  48. C11 c11;
  49.  
  50. children_.push_back(&a);
  51. children_.push_back(&b);
  52. children_.push_back(&b1);
  53. children_.push_back(&b2);
  54. children_.push_back(&c);
  55. children_.push_back(&c1);
  56. children_.push_back(&c11);
  57.  
  58. for(auto& i : children_) {
  59. i->print();
  60. i->output();
  61.  
  62. if(dynamic_cast<B*>(i) != nullptr) {
  63. if(dynamic_cast<B1*>(i) != nullptr) {
  64. static_cast<B1*>(i)->output();
  65. } else if(dynamic_cast<B2*>(i) != nullptr) {
  66. static_cast<B2*>(i)->output();
  67. } else {
  68. static_cast<B*>(i)->output();
  69. }
  70. } else if(dynamic_cast<C*>(i) != nullptr) {
  71. if(dynamic_cast<C1*>(i) != nullptr) {
  72. if(dynamic_cast<C11*>(i) != nullptr) {
  73. static_cast<C11*>(i)->output();
  74. } else {
  75. static_cast<C1*>(i)->output();
  76. }
  77. } else {
  78. static_cast<C*>(i)->output();
  79. }
  80. } else {
  81. i->output();
  82. }
  83. cout << endl;
  84. }
  85. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
A
A
A

B
A
B

B1
A
B1

B2
A
B2

C
A
C

C1
A
C1

C11
A
C11