C/C++

Объектно-ориентированное программирование с++

Помогите пожалуйста с задачей, не могу написать код
#include <iostream>
#include <vector>
#include <cmath>

class Shape {
public:
virtual double Perimeter() = 0;
};

class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double Perimeter() override { return 4 * side; }
};

class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double Perimeter() override { return 2 * M_PI * radius; }
};

int main() {
std::vector<Shape*> v;

Shape* s1 = new Circle(3.0);
v.push_back(s1);

Shape* s2 = new Square(4.0);
v.push_back(s2);

Shape* s3 = new Circle(5.0);
v.push_back(s3);

for (auto shape : v) {
std::cout << "Perimeter: " << shape->Perimeter() << std::endl;
}

return 0;
}


В этом коде мы создаем класс Shape, который является базовым классом для классов Square и Circle. В классе Shape мы объявляем абстрактную функцию Perimeter(), которая должна быть переопределена в наследниках.

Затем мы создаем классы Square и Circle, которые унаследованы от класса Shape. В этих классах мы реализуем функцию Perimeter(), чтобы она возвращала периметр квадрата или окружности соответственно.

Затем мы создаем вектор v и добавляем в него несколько объектов классов Square и Circle. Мы используем указатели типа базового класса Shape для хранения этих объектов.

Наконец, мы проходимся по всем объектам вектора v в цикле и выводим их периметры на консоль. Обратите внимание, что мы используем оператор -> для вызова функции Perimeter() у каждого объекта.
Коля Стёпин
Коля Стёпин
9 394
Лучший ответ
Александр спасибо огромное Вам за код и за подробное объяснение!! С праздником :)