Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 13

Виртуальные функции у классов

16.10.2021, 17:56. Показов 865. Ответов 3

Студворк — интернет-сервис помощи студентам


Добрый день, уважаемые гуру!

Решаю задачку: Создать базовый класс «Фигура» и несколько производных от него классов: «Точка», «Квадрат», «Круг» и т.д. Классы должны содержать приватные, защищенные и общедоступные члены данных. Ввести функции подсчета площади и периметра геометрических фигур.

Программу я написал, кроме функций подсчёта периметра и площади фигур они у меня как раз не получаются.

Приступив к написанию программы столкнулся с проблемой, что виртуальная функция void не возвращает значение.

Помогите, пожалуйста, написать функцию для подсчёта периметра и площади у класса круг. А остальные классы я сделаю сам по аналогии, ведь я хочу научиться делать это.
Прикрепляю код программы:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <string>
 
using namespace std;
 
// остается сделать,
// Ввести функции подсчета площади и периметра геометрических фигур.
 
 
class Figure { // базовая фигура. У нее есть координаты х и у, а также функция показать фигуру и функции площади и периметра
protected:
    int x; //координаты x и y
    int y;
public:
    Figure(int x, int y) { //конструктор базовой фигуры который будет наследоваться всеми дочерними классами
        this->x = x;
        this->y = y;
    };
    virtual void perimetr(); // периметр фигуры
    virtual void squeare(); // площадь
};
 
 
 
 
class Dot : public Figure { // Точка наследует от фигуры координаты х и у. Кроме координат у точки нет ничего
public:
    Dot(int x, int y) : Figure(x, y) {};
    void perimetr() {}; // у точки нет периметра
    void squeare() {}; // площади нет
};
 
 
 
class Circle : public Figure { // Круг наследует от базовой фигуры координаты, а также добавляет себе радиус, функцию указать радиус и функцию площади и периметра.
protected:
    int r; // радиус
public:
    Circle(int x, int y, int r) : Figure(x, y) {
        this->r = r;
    };
    void perimetr(int r) { //????
    
    }
    void squeare() {// ????
 
    };
    void setSizeRadius(int r) {} // указать радиус
};
 
 
 
 
class Elips : public Circle { // Элипс
                              /* Элипс наследует от круга координаты х и у, функцию показать фигуру.
                                 Также наследует радиус, функцию указать радиус.
                                 Помимо этого у самого элипса есть свои параметры: к = коэффицент растяжения
                                 И функция растянуть элипс
                              */
protected:
    int k; // коэффицент растяжения 
public:
    Elips(int x, int y, int r, int k) : Circle(x, y, r) {
        this->k = k;
    };
 
    virtual void perimetr() { // ????
        
    };
 
    void squeare() {// ????
 
    };
    virtual void setSizeRadius(int r) {};
    virtual void setStrech() {}; // растянуть элипс
};
 
 
 
 
class Square : public Figure { // квадрат
protected:
    int a; // сторона квадрата (все стороны равны)
public:
    Square(int x, int y, int a) : Figure(x, y) {
        this->a = a;
    };
    void perimetr() {
    
    };
 
    void squeare() {// ????
 
    };
};
 
 
 
class Rectangle : public Square { // прямоугольник
protected:
    int b; // вторая сторона (две противоположные стороны равны)
public: 
    Rectangle(int x, int y, int a, int b) : Square(x, y, a) {
        this->b = b;
    }
    void perimetr() {
    
    };
    void squeare() {// ????
 
    };
};
 
 
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    
    return 0;
}

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2021, 17:56
Ответы с готовыми решениями:

Наследование классов и виртуальные функции
Доброго времени суток. Передо мной стоит следующая задача: Разработать программу с использованием наследования классов, реализующую...

Виртуальные функции при создании иерархии классов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class var{ int temperatura; float shirina; public: virtual...

Реализовать иерархию классов, используя виртуальные функции
Здравствуйте! Хочется убедиться, что я правильно поняла задание. Буду благодарна за помощь!(особенно интересует последний пункт) От...

3
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.10.2021, 18:04
Цитата Сообщение от Oliki Посмотреть сообщение
столкнулся с проблемой, что виртуальная функция void не возвращает значение.
Ну так сделайте, чтобы возвращала. Зачем вы написали этот void, если вам нужно возвращать значение?
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 13
16.10.2021, 18:08  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну так сделайте, чтобы возвращала. Зачем вы написали этот void, если вам нужно возвращать значение?
а как тогда?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
16.10.2021, 18:19
Лучший ответ Сообщение было отмечено Oliki как решение

Решение

Цитата Сообщение от Oliki Посмотреть сообщение
а как тогда?
1) Определить какого типа будет значение;
2) Заменить в объявлении функций void на этот тип;
3) Написать реализацию подсчета периметра и площади.

Например для периметра. Нужно понять исходя из требуемых по заданию фигур (и их свойств) к какому множеству значений принадлежит результат. Если для квадрата - это скорее всего целое число, когда значения сторон также задаются целыми, то для круга - это явно вещественное число. Значит в базовом классе надо использовать самое широкое множество, т.е. вещественное. Для представления вещественных чисел в С++ используется, например, тип double. Вот на него и надо поменять ваш void.
Формулу периметра для пункта 3, я уж надеюсь, сами сможете в коде записать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2021, 18:19
Помогаю со студенческими работами здесь

Виртуальные функции (создать массив указателей на объекты трех классов)
Задание: создать массив указателей на объекты трех классов. Метод Show почему-то не переопределяется. В данном коде вводится 3 элемента в...

Реализовать иерархию классов (использовать наследование, полиморфизм, виртуальные функции)
Первый базовый класс – млекопитающие; поля – способ питания, вес, среда обитания. Во втором базовом классе описываются географические...

Почему RTTI работает только с иерархией классов, содержащие виртуальные функции?
Почему RTTI работает только с иерархией классов, содержащие виртуальные функции?

Виртуальные и чисто виртуальные функции
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто виртуальную? #include &lt;iostream&gt; using...

Виртуальные методы стандартных классов C++
Подскажите в каких стандартных(базовых) классах есть виртуальные методы? Есть ли в String?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru