fork(1) download
  1. #include <iostream>
  2.  
  3. class Visitor;
  4.  
  5. class Base
  6. {
  7. public:
  8. virtual ~Base() {}
  9. virtual void visit(Visitor&) = 0;
  10. };
  11.  
  12. class Derived : public Base
  13. {
  14. protected:
  15. int someVar = 2;
  16.  
  17. public:
  18. int getSomeVar () {return this->someVar;}
  19. void visit(Visitor& v) override;
  20. };
  21. class Visitor {
  22. public:
  23. void visit(Derived& d) {
  24. std::cout << d.getSomeVar() << std::endl;
  25. }
  26. };
  27.  
  28. void Derived::visit(Visitor& v) {
  29. v.visit(*this);
  30. }
  31.  
  32. int main()
  33. {
  34. Visitor v;
  35. // DO NOT USE MANUAL HEAP ALLOCATION IN REAL CODE !!!!!!!!
  36. Base * b = new Derived;
  37. b->visit(v);
  38. delete b;
  39. return 0;
  40. }
  41.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
2