Сделайте класс Triangle наследником класса Figure.
Напишите программу, в которой будет считываться последовательность фигур: Rectangle, Circle и Triangle, после чего примените функцию draw_array.
Формат входных данных
В первой строке вводится натуральное число N (N ≤ 50) — количество фигур.
В следующих N строках вводятся геометрические объекты. Каждый геометрический объект начинается со своего названия — строки «Rectangle», «Circle» и «Triangle». После названия геометрического объекта вводятся два (для прямоугольника) или одно (для круга и треугольника) натуральных числа, не превышающих 1000.
Формат выходных данных
Выведите все фигуры в формате, описанном в условии задачи. Между фигурами вставляйте один символ перевода строки.
входные данные:
3
Triangle 3
Rectangle 7 4
Rectangle 3 4
выходные данные:
..#..
.###.
#####
#######
#######
#######
#######
###
###
###
###
C/C++
С++, Сделайте класс Triangle наследником класса Figure. Напишите программу, в которой будет считываться ..
У вас класс Figure содержит две чистых виртуальных функции. Такой класс является абстрактным, а это значит, что невозможно создавать его экземпляры, включая указатель на динамический массив, потому что использование массива абстрактного класса не допускается.
https://docs.microsoft.com/ru-ru/cpp/error-messages/compiler-errors-1/compiler-error-c2259?view=msvc-160
Что нужно рисовать для круга не совсем понятно.
Если убрать чистую виртуальность функций базового класса, то можно так:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Figure {
virtual ~Figure() {}
virtual void draw(char ch = '#')const {}
virtual double area()const { return 0; };
virtual double perimeter()const { return 0; };
};
class Triangle : public Figure {
public:
explicit Triangle(const int h) : h(h) {}
void draw(char ch = '#')const override {
string img;
for (int i = 1, n = 1, b = 2 * h - 1; i <= h; ++i, n += 2, b -= 2) {
string dotted = string(b >> 1, '.');
img += dotted + string(n, '#') + dotted + '\n';
}
cout << img;
}
double area()const override {
return (h * (h * 2 - 1)) / 2.;
}
double perimeter()const override {
double a = h * 2 - 1;
double x = a / 2;
double b = sqrt(h * h + x * x);
return a + b + b;
}
private:
int h;
};
class Rectangle : public Figure {
public:
Rectangle(const int a, const int b) : a(a), b(b) {}
void draw(char ch = '#')const override {
string img;
for (int i = 0; i < b; ++i) {
img += string(a, '#') + '\n';
}
cout << img;
}
double area()const override {
return a * b;
}
double perimeter()const override {
return (a + b) * 2;
}
private:
int a, b;
};
class Circle : public Figure {
public:
Circle(const int r) : r(r) {}
void draw(char ch = '#')const override {
string img = ":)\n";
cout << img;
}
double area()const override {
return pi * r * r;
}
double perimeter()const override {
return 2 * pi * r;
}
private:
int r;
inline static const double pi = 3.1415926535897932;
};
void draw_array(vector<Figure*> box, const size_t size) {
for (size_t i = 0; i < size; ++i) {
box[i]->draw();
puts("");
}
}
int main() {
size_t size;
cin >> size;
vector<Figure*> box(size);
for (size_t i = 0; i < size; ++i) {
string name;
cin >> name;
if (name == "Triangle") {
int h;
cin >> h;
box[i] = new Triangle{ h };
} else if (name == "Rectangle") {
int a, b;
cin >> a >> b;
box[i] = new Rectangle{ a, b };
} else if (name == "Circle") {
int r;
cin >> r;
box[i] = new Circle{ r };
} else {
--i;
}
}
puts("");
draw_array(box, size);
}
https://docs.microsoft.com/ru-ru/cpp/error-messages/compiler-errors-1/compiler-error-c2259?view=msvc-160
Что нужно рисовать для круга не совсем понятно.
Если убрать чистую виртуальность функций базового класса, то можно так:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Figure {
virtual ~Figure() {}
virtual void draw(char ch = '#')const {}
virtual double area()const { return 0; };
virtual double perimeter()const { return 0; };
};
class Triangle : public Figure {
public:
explicit Triangle(const int h) : h(h) {}
void draw(char ch = '#')const override {
string img;
for (int i = 1, n = 1, b = 2 * h - 1; i <= h; ++i, n += 2, b -= 2) {
string dotted = string(b >> 1, '.');
img += dotted + string(n, '#') + dotted + '\n';
}
cout << img;
}
double area()const override {
return (h * (h * 2 - 1)) / 2.;
}
double perimeter()const override {
double a = h * 2 - 1;
double x = a / 2;
double b = sqrt(h * h + x * x);
return a + b + b;
}
private:
int h;
};
class Rectangle : public Figure {
public:
Rectangle(const int a, const int b) : a(a), b(b) {}
void draw(char ch = '#')const override {
string img;
for (int i = 0; i < b; ++i) {
img += string(a, '#') + '\n';
}
cout << img;
}
double area()const override {
return a * b;
}
double perimeter()const override {
return (a + b) * 2;
}
private:
int a, b;
};
class Circle : public Figure {
public:
Circle(const int r) : r(r) {}
void draw(char ch = '#')const override {
string img = ":)\n";
cout << img;
}
double area()const override {
return pi * r * r;
}
double perimeter()const override {
return 2 * pi * r;
}
private:
int r;
inline static const double pi = 3.1415926535897932;
};
void draw_array(vector<Figure*> box, const size_t size) {
for (size_t i = 0; i < size; ++i) {
box[i]->draw();
puts("");
}
}
int main() {
size_t size;
cin >> size;
vector<Figure*> box(size);
for (size_t i = 0; i < size; ++i) {
string name;
cin >> name;
if (name == "Triangle") {
int h;
cin >> h;
box[i] = new Triangle{ h };
} else if (name == "Rectangle") {
int a, b;
cin >> a >> b;
box[i] = new Rectangle{ a, b };
} else if (name == "Circle") {
int r;
cin >> r;
box[i] = new Circle{ r };
} else {
--i;
}
}
puts("");
draw_array(box, size);
}
Похожие вопросы
- Написать программу на C++.Создать класс vector3d, задаваемый тройкой координат. Создать конструктор...
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде
- Написать программу на языке Си, которая решит эту задачу:
- С ++ Написать демонстрационную программу, в которой реализовать следующие действия:
- Написать программу, которая выводит числа из файла с текстом и числами. С++
- Написать программу, которая по выбору пользователя меняет цвет консольного приложения C++
- Напишите программу, которая выводит таблицу факториалов от 1 до 10. c++
- Написать программы на СИ
- Написать программу на языке Си