#include <iostream>
using namespace std;
class Figure {
protected :
double x, y;
public :
void setDim( double i, double j) {
x = i;
y = j;
}
virtual void showArea( ) = 0 ; // чисто віртуальна
} ;
class Triangle: public Figure {
public :
void showArea( ) {
cout << "Triangle with height " ;
cout << x << " and base " << y;
cout << " has an area of " ;
cout << x * 0.5 * y << ".\n " ;
}
} ;
class Square: public Figure {
public :
void showArea( ) {
cout << "Square with dimensions " ;
cout << x << "x" << y;
cout << " has an area of " ;
cout << x * y << ".\n " ;
}
} ;
class Circle: public Figure {
// визначення showArea() відсутнє, і тому виникає помилка
} ;
int main( ) {
Figure * p; // створення вказівника базового типу
//Circle c; // спроба створення об'єкта типу Circle - ПОМИЛКА
Triangle t; // створення об'єктів похідних типів
Square s;
p = & t;
p- > setDim( 10.0 , 5.0 ) ;
p- > showArea( ) ;
p = & s;
p- > setDim( 10.0 , 5.0 ) ;
p- > showArea( ) ;
Figure ** x= new Figure* [ 2 ] ;
x[ 0 ] = & t;
x[ 1 ] = & s;
for ( int i= 0 ; i< 2 ; i++ ) {
x[ i] - > showArea( ) ;
}
return 0 ;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEZpZ3VyZSB7CnByb3RlY3RlZDoKICAgIGRvdWJsZSB4LCB5OwpwdWJsaWM6CiAgICB2b2lkIHNldERpbShkb3VibGUgaSwgZG91YmxlIGopIHsKICAgICAgICB4ID0gaTsKICAgICAgICB5ID0gajsKICAgIH0KICAgIHZpcnR1YWwgdm9pZCBzaG93QXJlYSgpID0gMDsgLy8g0YfQuNGB0YLQviDQstGW0YDRgtGD0LDQu9GM0L3QsAp9OwoKY2xhc3MgVHJpYW5nbGU6IHB1YmxpYyBGaWd1cmUgewpwdWJsaWM6CiAgICB2b2lkIHNob3dBcmVhKCkgewogICAgICAgIGNvdXQgPDwgIlRyaWFuZ2xlIHdpdGggaGVpZ2h0ICI7CiAgICAgICAgY291dCA8PCB4IDw8ICIgYW5kIGJhc2UgIiA8PCB5OwogICAgICAgIGNvdXQgPDwgIiBoYXMgYW4gYXJlYSBvZiAiOwogICAgICAgIGNvdXQgPDwgeCAqIDAuNSAqIHkgPDwgIi5cbiI7CiAgICB9Cn07CgpjbGFzcyBTcXVhcmU6IHB1YmxpYyBGaWd1cmUgewpwdWJsaWM6CiAgICB2b2lkIHNob3dBcmVhKCkgewogICAgICAgIGNvdXQgPDwgIlNxdWFyZSB3aXRoIGRpbWVuc2lvbnMgIjsKICAgICAgICBjb3V0IDw8IHggPDwgIngiIDw8IHk7CiAgICAgICAgY291dCA8PCAiIGhhcyBhbiBhcmVhIG9mICI7CiAgICAgICAgY291dCA8PCB4ICogeSA8PCAiLlxuIjsKICAgIH0KfTsKCmNsYXNzIENpcmNsZTogcHVibGljIEZpZ3VyZSB7CiAgICAvLyDQstC40LfQvdCw0YfQtdC90L3RjyBzaG93QXJlYSgpINCy0ZbQtNGB0YPRgtC90ZQsINGWINGC0L7QvNGDINCy0LjQvdC40LrQsNGUINC/0L7QvNC40LvQutCwCn07CgppbnQgbWFpbigpIHsKICAgIEZpZ3VyZSAqcDsgLy8g0YHRgtCy0L7RgNC10L3QvdGPINCy0LrQsNC30ZbQstC90LjQutCwINCx0LDQt9C+0LLQvtCz0L4g0YLQuNC/0YMKICAgIC8vQ2lyY2xlIGM7IC8vINGB0L/RgNC+0LHQsCDRgdGC0LLQvtGA0LXQvdC90Y8g0L7QsSfRlNC60YLQsCDRgtC40L/RgyBDaXJjbGUgLSDQn9Ce0JzQmNCb0JrQkAogICAgVHJpYW5nbGUgdDsgLy8g0YHRgtCy0L7RgNC10L3QvdGPINC+0LEn0ZTQutGC0ZbQsiDQv9C+0YXRltC00L3QuNGFINGC0LjQv9GW0LIKICAgIFNxdWFyZSBzOwoKICAgIHAgPSAmdDsKICAgIHAtPnNldERpbSgxMC4wLCA1LjApOwogICAgcC0+c2hvd0FyZWEoKTsKCiAgICBwID0gJnM7CiAgICBwLT5zZXREaW0oMTAuMCwgNS4wKTsKICAgIHAtPnNob3dBcmVhKCk7CglGaWd1cmUgKip4PW5ldyBGaWd1cmUqWzJdOwoJeFswXT0mdDsKCXhbMV09JnM7Cglmb3IoIGludCBpPTA7aTwyO2krKyl7CgkJeFtpXS0+c2hvd0FyZWEoKTsKCQkKCX0KCQogICAgcmV0dXJuIDA7Cn0=