fork download
  1. #include <iostream>
  2.  
  3. class A {
  4. public:
  5. virtual void report() const {
  6. std::cout << "A" << std::endl;
  7. }
  8.  
  9. virtual A *instance() const {
  10. return new A;
  11. }
  12. };
  13.  
  14. class B : public A {
  15. public:
  16. virtual void report() const {
  17. std::cout << "B" << std::endl;
  18. }
  19.  
  20. B *instance() const {
  21. return new B;
  22. }
  23. };
  24.  
  25. class C : public A {
  26. public:
  27. virtual void report() const {
  28. std::cout << "C" << std::endl;
  29. }
  30.  
  31. C *instance() const {
  32. return new C;
  33. }
  34. };
  35.  
  36. int main() {
  37. A *a = new A;
  38. A *b = new B;
  39. A *c = new C;
  40.  
  41. A *a1 = a->instance();
  42. A *b1 = b->instance();
  43. A *c1 = c->instance();
  44.  
  45. a->report();
  46. b->report();
  47. c->report();
  48.  
  49. a1->report();
  50. b1->report();
  51. c1->report();
  52. }
  53.  
  54.  
Success #stdin #stdout 0.02s 2856KB
stdin
Standard input is empty
stdout
A
B
C
A
B
C