#include<iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b) {
width = a;
height = b;
}
};
class CRectangle : public CPolygon {
public:
int area () {
return (width * height);
}
};
class CTriangle : public CPolygon {
public:
int area () {
return (width * height / 2);
}
};
int main() {
CRectangle rect;
CTriangle trgle;
rect.set_values(4, 5);
trgle.set_values(4, 5);
cout << rect.area() << endl;
cout << trgle.area() << endl;
return 0;
}
/*
CPloygon::width and CPloygon::height are protected class members.
CRectangle::width and CRectangle::height are protected class members.
CTriangle::width and CTriangle::height are protected class members.
CRectangle::set_values is a public member function.
CTriangle::set_values is a public member function.
CRectangle and CTriangle are derived classes of the base class CPolygon.
*/
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBDUG9seWdvbiB7CiAgcHJvdGVjdGVkOgogICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgcHVibGljOgogICAgdm9pZCBzZXRfdmFsdWVzIChpbnQgYSwgaW50IGIpIHsKICAgICAgd2lkdGggPSBhOwogICAgICBoZWlnaHQgPSBiOwogICAgfQp9OwoKY2xhc3MgQ1JlY3RhbmdsZSA6IHB1YmxpYyBDUG9seWdvbiB7CiAgcHVibGljOgogICAgaW50IGFyZWEgKCkgewogICAgICByZXR1cm4gKHdpZHRoICogaGVpZ2h0KTsKICAgIH0KfTsKCmNsYXNzIENUcmlhbmdsZSA6IHB1YmxpYyBDUG9seWdvbiB7CiAgcHVibGljOgogICAgaW50IGFyZWEgKCkgewogICAgICByZXR1cm4gKHdpZHRoICogaGVpZ2h0IC8gMik7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIENSZWN0YW5nbGUgcmVjdDsKICAgIENUcmlhbmdsZSB0cmdsZTsKICAgIHJlY3Quc2V0X3ZhbHVlcyg0LCA1KTsKICAgIHRyZ2xlLnNldF92YWx1ZXMoNCwgNSk7CiAgICBjb3V0IDw8IHJlY3QuYXJlYSgpIDw8IGVuZGw7CiAgICBjb3V0IDw8IHRyZ2xlLmFyZWEoKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0KLyoKQ1Bsb3lnb246OndpZHRoIGFuZCBDUGxveWdvbjo6aGVpZ2h0IGFyZSBwcm90ZWN0ZWQgY2xhc3MgbWVtYmVycy4KQ1JlY3RhbmdsZTo6d2lkdGggYW5kIENSZWN0YW5nbGU6OmhlaWdodCBhcmUgcHJvdGVjdGVkIGNsYXNzIG1lbWJlcnMuCkNUcmlhbmdsZTo6d2lkdGggYW5kIENUcmlhbmdsZTo6aGVpZ2h0IGFyZSBwcm90ZWN0ZWQgY2xhc3MgbWVtYmVycy4KQ1JlY3RhbmdsZTo6c2V0X3ZhbHVlcyBpcyBhIHB1YmxpYyBtZW1iZXIgZnVuY3Rpb24uCkNUcmlhbmdsZTo6c2V0X3ZhbHVlcyBpcyBhIHB1YmxpYyBtZW1iZXIgZnVuY3Rpb24uCkNSZWN0YW5nbGUgYW5kIENUcmlhbmdsZSBhcmUgZGVyaXZlZCBjbGFzc2VzIG9mIHRoZSBiYXNlIGNsYXNzIENQb2x5Z29uLgoqLw==