- #include <iostream> 
-   
- class Visitor; 
-   
- class Base 
- { 
-     public: 
-         virtual ~Base() {} 
-         virtual void visit(Visitor&) = 0; 
- }; 
-   
- class Derived : public Base 
- { 
-     protected: 
-         int someVar = 2; 
-   
-     public: 
-         int getSomeVar () {return this->someVar;} 
-         void visit(Visitor& v) override; 
- }; 
- class Visitor { 
-     public: 
-          void visit(Derived& d) { 
-               std::cout << d.getSomeVar() << std::endl; 
-          } 
- }; 
-   
- void Derived::visit(Visitor& v) { 
-     v.visit(*this); 
- } 
-   
- int main() 
- { 
-     Visitor v; 
-     // DO NOT USE MANUAL HEAP ALLOCATION IN REAL CODE !!!!!!!! 
-     Base * b = new Derived; 
-     b->visit(v); 
-     delete b; 
-     return 0; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgVmlzaXRvcjsKCmNsYXNzIEJhc2UKewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgfkJhc2UoKSB7fQogICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdChWaXNpdG9yJikgPSAwOwp9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlCnsKICAgIHByb3RlY3RlZDoKICAgICAgICBpbnQgc29tZVZhciA9IDI7CgogICAgcHVibGljOgogICAgICAgIGludCBnZXRTb21lVmFyICgpIHtyZXR1cm4gdGhpcy0+c29tZVZhcjt9CiAgICAgICAgdm9pZCB2aXNpdChWaXNpdG9yJiB2KSBvdmVycmlkZTsKfTsKY2xhc3MgVmlzaXRvciB7CiAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgdmlzaXQoRGVyaXZlZCYgZCkgewogICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBkLmdldFNvbWVWYXIoKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgIH0KfTsKCnZvaWQgRGVyaXZlZDo6dmlzaXQoVmlzaXRvciYgdikgewogICAgdi52aXNpdCgqdGhpcyk7Cn0KCmludCBtYWluKCkKewogICAgVmlzaXRvciB2OwogICAgLy8gRE8gTk9UIFVTRSBNQU5VQUwgSEVBUCBBTExPQ0FUSU9OIElOIFJFQUwgQ09ERSAhISEhISEhIQogICAgQmFzZSAqIGIgPSBuZXcgRGVyaXZlZDsKICAgIGItPnZpc2l0KHYpOwogICAgZGVsZXRlIGI7CiAgICByZXR1cm4gMDsKfQo=