Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
2 / 2 / 1
Регистрация: 22.07.2015
Сообщений: 36

Реализация базового класса для геометрических фигур

08.11.2015, 14:59. Показов 10701. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно реализовать базовый класс для геометрических фигур — Shape и два его наследника — Circle и Rectangle. У базового класса Shape нужно определить общий метод area(), который возвращает площадь геометрической фигуры, а в наследниках — реализовать этот метод. В комментариях к коду указано, какие параметры должны принимать конструкторы классов-наследников.

Требования к реализации: При реализации не нужно вводить или выводить что-либо. Реализовывать main не нужно.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cmath>
// Воспользуйтесь константой для пи - M_PI
 
// базовый класс для фигур
struct Shape
{
     // метод area вычисляющий площадь фигуры
};
 
// класс для круга
struct Circle
{
    // конструктор от радиуса
    // реализация метода area
};
 
// класс прямоугольника
struct Rectangle
{
    // конструктор от ширины и высоты
    // реализация метода area
};
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2015, 14:59
Ответы с готовыми решениями:

Реализация базового класса для геометрических фигур - C++
нужно реализовать базовый класс для геометрических фигур — Shape и два его наследника — Circle и Rectangle. У базового класса Shape нужно...

Написать программу для рисования геометрических фигур
Написать программу для рисования геометрических фигур

Многофайловая система классов для описания плоских геометрических фигур
Помогите пожалуйста составить по данной программе многофайловую систему,а то у меня не получается реализовать корректную работу отдельных...

14
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 15:12
Ingvar2,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// базовый класс для фигур
class Shape {
public:
    virtual ~Shape() {}
     // метод area вычисляющий площадь фигуры
    virtual double area() const = 0;
};
 
// класс для круга
class Circle : public Shape {
public:
    // конструктор от радиуса
    Circle(size_t r) : m_r(r) { }
 
    // реализация метода area
    double area() const {
        return M_PI * m_r * m_r;
    }
 
private:
    size_t m_r;
};
 
// класс прямоугольника
class Rectangle : public Shape {
public:
    // конструктор от ширины и высоты
    Rectangle(size_t w, size_t h) : m_w(w), m_h(h) { }
 
    // реализация метода area
    double area() const {
        return m_w * m_h;
    }
 
private:
    size_t m_w;
    size_t m_h;
};
0
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:12
Может вместе найдем ошибку у меня. Задача таже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <cmath>
// Воспользуйтесь константой для пи - M_PI
#define M_PI 3.14159265358979323846
 
// базовый класс для фигур
struct Shape
{
     // метод area вычисляющий площадь фигуры    
    virtual double area() const = 0;
};
 
// класс для круга
struct Circle : Shape
{
    // конструктор от радиуса
    Circle(double r) : r(r)
    {}
    // реализация метода area
    double area(double r) {
        return r*r*M_PI;
    }
    
    double r;
};
 
// класс прямоугольника
struct Rectangle : Shape
{
    // конструктор от ширины и высоты
    Rectangle(double width, double height) : width(width), height(height)
    {}
    // реализация метода area
    double area(double width, double height) {
        return width*height;
    }
    
    double height;
    double width;
};
Что-то тут не так, так как не хочет компилировться

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Compilation error
main.cpp: In function ‘int main():
main.cpp:109:30: error: invalid new-expression of abstract class type ‘Circle’
     Shape * s1 = new Circle(r);
                              ^
main.cpp:58:8: note:   because the following virtual functions are pure within ‘Circle’:
 struct Circle : Shape
        ^
main.cpp:54:20: note:   virtual double Shape::area() const
     virtual double area() const = 0;
                    ^
main.cpp:114:36: error: invalid new-expression of abstract class type ‘Rectangle’
     Shape * s2 = new Rectangle(w, h);
                                    ^
main.cpp:72:8: note:   because the following virtual functions are pure within ‘Rectangle’:
 struct Rectangle : Shape
        ^
main.cpp:54:20: note:   virtual double Shape::area() const
     virtual double area() const = 0;
                    ^
main.cpp:119:31: error: invalid new-expression of abstract class type ‘Rect’
     Shape * s3 = new Rect(h, w);
                               ^
main.cpp:90:8: note:   because the following virtual functions are pure within ‘Rect’:
 struct Rect : Rectangle {
        ^
main.cpp:54:20: note:   virtual double Shape::area() const
     virtual double area() const = 0;
0
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 15:19
Ginvra, const забыл добавить в реализациях функции area.
и параметры в area зачем то добавил. сигнатура в реализации функций должна быть такая же, как и в базовом классе. иначе ты создаешь новую функцию, а не переопределяешь.
1
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:27
такс, а по поводу параметров плиз поподробнее, у Вас в коде тоже сигнатуры функций отличаются от базовых, или Вы о другом? Т.е. мне нужно написать вместо

C++
1
2
3
double area(double r) {
        return r*r*M_PI;
    }
вот это (или тут без this? хотя как тогда понять откуда берется значение7)

C++
1
2
3
double area() {
        return this->r*this->r*M_PI;
    }
0
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 15:32
Ginvra, где у меня отличается?

Добавлено через 23 секунды
Ginvra, вот это. this не обязателен
0
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:34
да, извините, невнимательным был, у Вас не отличаются. Сейчас проверим этот вариант.

Получилось следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <cmath>
// Воспользуйтесь константой для пи - M_PI
 
// базовый класс для фигур
struct Shape
{
     // метод area вычисляющий площадь фигуры    
    virtual double area() const = 0;
};
 
// класс для круга
struct Circle : Shape
{
    // конструктор от радиуса
    Circle(double r) : r(r)
    {}
    // реализация метода area
    double area() const {
        return r*r*M_PI;
    }
    
private:
    double r;
};
 
// класс прямоугольника
struct Rectangle : Shape
{
    // конструктор от ширины и высоты
    Rectangle(double width, double height) : width(width), height(height)
    {}
    // реализация метода area
    double area() const {
        return width*height;
    }
    
private:
    double height;
    double width;
};
и ошибка

C++
1
2
3
Failed test #1. Run time error:
terminate called after throwing an instance of 'std::logic_error'
  what():  Memory leaks
0
 Аватар для Barrent
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
08.11.2015, 15:39
Для таких случаев придумали ключевое слово override
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Shape
{
public:
    virtual double area() const = 0;
};
 
class Circle : public Shape
{
public:
    double area() const override{}  //ОК
};
 
class Rectangle : public Shape
{
public:
    double area(int a) const override{}//Будет сообщение о том, что метод никаких таки базовых не переоперделяет
};
1
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 15:44
Ginvra, виртуальный деструктор забыл в базовый класс добавить. у меня посмотри как.
1
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:47
pproger, Спасибо большое, у меня почему-то в голове мысль закрепилась, что компилятор сам поставит деструктор, если его нет(не понимаю откуда такая мысль висит, но даже и не подумал о нем, когда увидел, что память течет)
0
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
08.11.2015, 15:48
Ginvra, поставит. но не виртуальный.
0
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:49
pproger, хм...значит мысль не просто так висит и я не перепутал с чем-то другим. Пойду перечитаю материал более подробно. Еще раз спасибо.
0
2 / 2 / 1
Регистрация: 22.07.2015
Сообщений: 36
08.11.2015, 15:53  [ТС]
Ginvra, а как в итоге правильно?
0
0 / 0 / 1
Регистрация: 25.10.2015
Сообщений: 8
08.11.2015, 15:58
Лучший ответ Сообщение было отмечено Ingvar2 как решение

Решение

Ingvar2, в мой последний вариант добавить виртуальный деструктор и получить следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cmath>
// Воспользуйтесь константой для пи - M_PI
 
// базовый класс для фигур
struct Shape
{
    virtual ~Shape() {}
     // метод area вычисляющий площадь фигуры    
    virtual double area() const = 0;
};
 
// класс для круга
struct Circle : Shape
{
    // конструктор от радиуса
    Circle(double r) : r(r)
    {}
    // реализация метода area
    double area() const {
        return r*r*M_PI;
    }
    
private:
    double r;
};
 
// класс прямоугольника
struct Rectangle : Shape
{
    // конструктор от ширины и высоты
    Rectangle(double width, double height) : width(width), height(height)
    {}
    // реализация метода area
    double area() const {
        return width*height;
    }
    
private:
    double height;
    double width;
};
0
2 / 2 / 1
Регистрация: 22.07.2015
Сообщений: 36
08.11.2015, 16:34  [ТС]
Спасибо.

Добавлено через 33 минуты
Ginvra, можешь мне в личку кинуть свой варианта шага 1? Мой система не принимает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2015, 16:34
Помогаю со студенческими работами здесь

Построить систему классов для описания плоских геометрических фигур
Построить систему классов для описания плоских геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для создания...

Построить систему классов для описания плоских геометрических фигур
C++ Построить систему классов для описания плоских геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для...

Построить систему классов для описания плоских геометрических фигур
Здравствуйте. Прошу помощи) Вот сама задача Построить систему классов для описания плоских геометрических фигур: круг, квадрат,...

Класс для подсчета площади геометрических фигур ошибка при компиляции
Здравствуйте. При компиляции выводит ошибку: &quot;CL.exe&quot; завершилась с кодом 2. Конкретно номер строки в коде не показывает, где ошибка. ...

Реализация физических законов для разных геометрических фигур
Уже давно пытаюсь разобраться с тем, как работает физический движок, на котором, например, основан numpty physic. Каким образом вычисляются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru