#include <string>
#include <cmath>
#include <vector>
#include <iostream>
class Shape {
public:
Shape(const std::string name): _name(name) { ; }
std::string name() const { return _name; }
virtual double area() const = 0;
private:
const std::string _name;
};
class Circle : public Shape {
public:
Circle(double r): Shape("Circle"), _r(r) { ; }
double area() const override {
return M_PI * _r * _r;
}
private:
const double _r;
};
std::ostream& operator<<(std::ostream& out, const Shape& s) {
return out << "Nazwa: " << s.name() << ", pole: " << s.area();
}
int main() {
std::vector<Shape*> shapes = { new Circle(12.5), new Circle(18.5) };
for(unsigned i = 0; i < shapes.size(); ++i) {
std::cout << *shapes[i] << "\n";
}
for(unsigned i = 0; i < shapes.size(); ++i) {
delete shapes[i];
}
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpjbGFzcyBTaGFwZSB7CnB1YmxpYzoKICBTaGFwZShjb25zdCBzdGQ6OnN0cmluZyBuYW1lKTogX25hbWUobmFtZSkgeyA7IH0KCiAgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lOyB9CgogIHZpcnR1YWwgZG91YmxlIGFyZWEoKSBjb25zdCA9IDA7Cgpwcml2YXRlOgogIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOwp9OwoKY2xhc3MgQ2lyY2xlIDogcHVibGljIFNoYXBlIHsKcHVibGljOgogIENpcmNsZShkb3VibGUgcik6IFNoYXBlKCJDaXJjbGUiKSwgX3IocikgeyA7IH0KCiAgZG91YmxlIGFyZWEoKSBjb25zdCBvdmVycmlkZSB7CiAgICByZXR1cm4gTV9QSSAqIF9yICogX3I7CiAgfQoKcHJpdmF0ZToKICBjb25zdCBkb3VibGUgX3I7Cn07CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFNoYXBlJiBzKSB7CiAgcmV0dXJuIG91dCA8PCAiTmF6d2E6ICIgPDwgcy5uYW1lKCkgPDwgIiwgcG9sZTogIiA8PCBzLmFyZWEoKTsKfQoKaW50IG1haW4oKSB7CiAgc3RkOjp2ZWN0b3I8U2hhcGUqPiBzaGFwZXMgPSB7IG5ldyBDaXJjbGUoMTIuNSksIG5ldyBDaXJjbGUoMTguNSkgfTsKICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBzaGFwZXMuc2l6ZSgpOyArK2kpIHsKICAgIHN0ZDo6Y291dCA8PCAqc2hhcGVzW2ldIDw8ICJcbiI7CiAgfQoKICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBzaGFwZXMuc2l6ZSgpOyArK2kpIHsKICAgIGRlbGV0ZSBzaGFwZXNbaV07CiAgfQogIHJldHVybiAwOwp9Cg==