fork download
  1. #include <string>
  2. #include <cmath>
  3. #include <vector>
  4. #include <iostream>
  5.  
  6. class Shape {
  7. public:
  8. Shape(const std::string name): _name(name) { ; }
  9.  
  10. std::string name() const { return _name; }
  11.  
  12. virtual double area() const = 0;
  13.  
  14. private:
  15. const std::string _name;
  16. };
  17.  
  18. class Circle : public Shape {
  19. public:
  20. Circle(double r): Shape("Circle"), _r(r) { ; }
  21.  
  22. double area() const override {
  23. return M_PI * _r * _r;
  24. }
  25.  
  26. private:
  27. const double _r;
  28. };
  29.  
  30. std::ostream& operator<<(std::ostream& out, const Shape& s) {
  31. return out << "Nazwa: " << s.name() << ", pole: " << s.area();
  32. }
  33.  
  34. int main() {
  35. std::vector<Shape*> shapes = { new Circle(12.5), new Circle(18.5) };
  36. for(unsigned i = 0; i < shapes.size(); ++i) {
  37. std::cout << *shapes[i] << "\n";
  38. }
  39.  
  40. for(unsigned i = 0; i < shapes.size(); ++i) {
  41. delete shapes[i];
  42. }
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0s 3232KB
stdin
Standard input is empty
stdout
Nazwa: Circle, pole: 490.874
Nazwa: Circle, pole: 1075.21