- #include <iostream> 
- #include <string> 
-   
- class shape 
- { 
- public: 
-     void setValues(int height_, int width_) 
-     { 
-         height = height_; 
-         width = width_; 
-     } 
-   
-     virtual int area() = 0;  // This is needed for polymorphism to work 
-   
-     virtual std::string name() = 0; 
-   
- protected: 
-     int height; 
-     int width; 
- }; 
-   
- class rectangle : public shape 
- { 
- public: 
-     int area() 
-     { 
-         return height * width; 
-     } 
-   
-     std::string name() 
-     { 
-         return "Rectangle"; 
-     } 
- }; 
-   
- class triangle :public shape 
- { 
- public: 
-     int area() 
-     { 
-         return height * width / 2; 
-     } 
-   
-     std::string name() 
-     { 
-         return "Triangle"; 
-     } 
- }; 
-   
- void print_area(shape& poly) 
- { 
-     std::cout << poly.name() << ' ' << poly.area() << '\n'; 
- } 
-   
- int main() 
- { 
-     rectangle rect; 
-     triangle trng; 
-   
-     rect.setValues(2, 3); 
-     trng.setValues(5, 4); 
-   
-     print_area(rect); 
-     print_area(trng); 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3Mgc2hhcGUKewpwdWJsaWM6CiAgICB2b2lkIHNldFZhbHVlcyhpbnQgaGVpZ2h0XywgaW50IHdpZHRoXykKICAgIHsKICAgICAgICBoZWlnaHQgPSBoZWlnaHRfOwogICAgICAgIHdpZHRoID0gd2lkdGhfOwogICAgfQoKICAgIHZpcnR1YWwgaW50IGFyZWEoKSA9IDA7ICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgcG9seW1vcnBoaXNtIHRvIHdvcmsKCiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIG5hbWUoKSA9IDA7Cgpwcm90ZWN0ZWQ6CiAgICBpbnQgaGVpZ2h0OwogICAgaW50IHdpZHRoOwp9OwoKY2xhc3MgcmVjdGFuZ2xlIDogcHVibGljIHNoYXBlCnsKcHVibGljOgogICAgaW50IGFyZWEoKQogICAgewogICAgICAgIHJldHVybiBoZWlnaHQgKiB3aWR0aDsKICAgIH0KCiAgICBzdGQ6OnN0cmluZyBuYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gIlJlY3RhbmdsZSI7CiAgICB9Cn07CgpjbGFzcyB0cmlhbmdsZSA6cHVibGljIHNoYXBlCnsKcHVibGljOgogICAgaW50IGFyZWEoKQogICAgewogICAgICAgIHJldHVybiBoZWlnaHQgKiB3aWR0aCAvIDI7CiAgICB9CgogICAgc3RkOjpzdHJpbmcgbmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICJUcmlhbmdsZSI7CiAgICB9Cn07Cgp2b2lkIHByaW50X2FyZWEoc2hhcGUmIHBvbHkpCnsKICAgIHN0ZDo6Y291dCA8PCBwb2x5Lm5hbWUoKSA8PCAnICcgPDwgcG9seS5hcmVhKCkgPDwgJ1xuJzsKfQoKaW50IG1haW4oKQp7CiAgICByZWN0YW5nbGUgcmVjdDsKICAgIHRyaWFuZ2xlIHRybmc7CgogICAgcmVjdC5zZXRWYWx1ZXMoMiwgMyk7CiAgICB0cm5nLnNldFZhbHVlcyg1LCA0KTsKCiAgICBwcmludF9hcmVhKHJlY3QpOwogICAgcHJpbnRfYXJlYSh0cm5nKTsKfQo=