#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=