
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() у каждого объекта.
#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() у каждого объекта.
Александр
спасибо огромное Вам за код и за подробное объяснение!! С праздником :)
Похожие вопросы
- Программирование на С++
- Программирование на C++
- Как начать изучать программирование?
- Доброго дня! Хочу сменить сферу деятельности . Заинтересовал вариант программирования .
- Программирование на C++
- Книги по программированию.
- Может ли новичок в программирование начать с c++/Gamedev
- Чем отличаются языки программирования ???
- На каком языке программирования (Assembler / С / С++) лучше будет написать компилятор для своего языка программирования?
- Указатели. Программирование с использованием динамических двухмерным масивов.