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

Написать классы Тор, Параллелепипед и Элипс, которые наследуются от класса Figure

30.05.2023, 19:14. Показов 338. Ответов 5
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, нужно было написать класс Тор, Параллелепипед и Элипс, которые наследуются от класса Figure. Не могу найти ошибку в коде, изза которой компилятор ругается. Помогите пожалуйста
Вот код

main.cpp
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
#include <iostream>
#include "Figure.h"
#include "Tor.h"
#include "Elips.h"
#include "Parallelepiped.h"
#include <string>
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    const int size = 2;
    Figure* figures[size];
 
    Tor* Toroid = new Tor("",1 , 8, 3);
    figures[0] = Toroid;
 
    Elips* Elipsoid = new Elips(4, 6, 8);
    figures[1] = Elipsoid;
 
    Parallelepiped* Parall = new Parallelepiped("",1, 1, 8, 3);
    figures[2] = Parall;
 
    for (int i = 0; i < 2; i++) {
        cout << *figures[i] << endl;
    }
}
Figure.h
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
#pragma once
#include <iostream>
#include <string>
#include <ctime>
 
using namespace std;
 
class Figure
{
protected:
    string Name;
    int Volume;
 
    const double PI = 3.1415926535897932384626433832795;
public:
    Figure();
    Figure(string Name, int Volume);
    virtual ~Figure(){};
 
    // виртуальный метод, который переопределяется в производных классах
    virtual void print();
    virtual double findVolume();
 
    virtual friend ostream& operator<<(ostream& cout, Figure& a);
};
Figure.cpp
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
#include "Figure.h"
 
Figure::Figure()
{
    this->Name = "Фигура";
    this->Volume = 0;
}
 
 
Figure::Figure(string Name, int Volume)
{
    this->Name = Name;
    this->Volume = Volume;
}
 
void Figure::print()
{
    cout << Name << "Имеет следующий объём: " << Volume << endl;
}
 
double Figure::findVolume()
{
    return 0;
}
 
 
ostream& operator<<(ostream& cout, Figure& first)
{
    first.print();
    return cout;
}
Tor.cpp
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
#include "Tor.h"
 
Tor::Tor() : Figure()
{
    R = 0;
    r = 0;
}
 
Tor::Tor(string Name,int Volume, int BigRadius, int SmallRadius) : 
    Figure(Name,Volume)
{
    this->R = R;
    this->r = r;
}
 
double Tor::findVolume()
{
    if (R <= r)
        return;
    else
    {
        Volume = 2 * PI * R * r;
    }
    return Volume;
}
 
void Tor::print()
{
    cout << "Фигура" << Name << " С радиусом R = " << R << "," << "И радиусом r = " << r << "Имеет объём, равный" << r << endl;
}
 
int Tor::getR()
{
    return R;
}
 
int Tor::getr()
{
    return r;
}
 
void Tor::setR(int R)
{
    this->R = R;
    return;
}
 
void Tor::setr(int r)
{
    this->r = r;
    return;
}
 
ostream& operator<<(ostream& cout, Tor& a)
{
    a.print(); // вызов виртуального метода
    return cout;
}
Tor.h
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
#pragma once
#include "Figure.h"
#include <iostream>
 
class Tor :
    public Figure
{
 
private:
    string Name = "Тор";
    int R = 0;
    int r = 0;
 
    //Перегрузка операции вывода из потока
    friend ostream& operator<<(ostream& cout, Tor& a)
    {
        a.print(); // вызов виртуального метода
        return cout;
    }
public:
    Tor();
    Tor(string Name, int Volume, int BigRadius, int SmallRadius);
 
    //Переопределение виртуального метода
    virtual void print();
 
    //Геттеры
    int getR();
    int getr();
 
    //Сеттеры
    void setR(int R);
    void setr(int r);
 
    //Вспомогательные методы
    double findVolume();
};
Elips.cpp
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
#include "Elips.h"
 
Elips::Elips() : 
    Figure()
{
    a = 0;
    b = 0;
    c = 0;
}
 
Elips::Elips(int a, int b, int c) :
    Figure(Name, Volume)
{
    this->a = a;
    this->b = b;
    this->c = c;
}
 
double Elips::findVolume()
{
    if (a || b || c < 0)
        return;
    else
    {
        Volume = 4/3 * PI * a * b;
    }
    return Volume;
}
 
void Elips::print()
{
    cout << "Фигура" << Name << " С полуосями:  " << a << ',' << b << ',' << c << "Имеет объём, равный" << a << endl;
}
 
int Elips::getA()
{
    return a;
}
 
int Elips::getB()
{
    return b;
}
 
int Elips::getC()
{
    return c;
}
 
void Elips::setA(int a)
{
    this->a = a;
    return;
}
 
void Elips::setB(int b)
{
    this->b = b;
    return;
}
 
void Elips::setC(int c)
{
    this->c = c;
    return;
}
Elips.h
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
#pragma once
#include "Figure.h"
#include <iostream>
using namespace std;
 
class Elips :
    public Figure
{
 
private:
    int a = 0;
    int b = 0;
    int c = 0;
    string Name = "Элипс";
 
    friend ostream& operator<<(ostream& cout, Elips& a)
    {
        a.print(); // вызов виртуального метода
        return cout;
    }
 
public:
    Elips();
    Elips(int a, int b, int c);
 
    // переопределение виртуального метода
    virtual void print();
    double findVolume();
 
    //Геттеры
    int getA();
    int getB();
    int getC();
 
    //Сеттеры
    void setA(int a);
    void setB(int b);
    void setC(int c);
};
Parallelepiped.cpp
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
#include "Parallelepiped.h"
 
Parallelepiped::Parallelepiped() : Figure()
{
    a = 0;
    b = 0;
    c = 0;
}
 
Parallelepiped::Parallelepiped(string Name, int Volume, int a, int b, int c) : 
    Figure(Name,Volume)
{
    this->a = a;
    this->b = b;
    this->c = c;
}
 
double Parallelepiped::findVolume()
{
    if (a || b || c < 0)
        return;
    else
    {
        Volume = a * b * c;
    }
    return Volume;
}
 
void Parallelepiped::print()
{
    cout << "Фигура" << Name << " Со сторонами:  " << a << ',' << b << ',' << c << "Имеет объём, равный" << a << endl;
}
 
int Parallelepiped::getA()
{
    return a;
}
 
int Parallelepiped::getB()
{
    return b;
}
 
int Parallelepiped::getC()
{
    return c;
}
 
void Parallelepiped::setA(int a)
{
    this->a = a;
    return;
}
 
void Parallelepiped::setB(int b)
{
    this->b = b;
    return;
}
 
void Parallelepiped::setC(int c)
{
    this->c = c;
    return;
}
Parallelepiped.h
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
#pragma once
#include "Figure.h"
#include <iostream>
 
class Parallelepiped :
    public Figure
{
 
protected:
    int a = 0;
    int b = 0;
    int c = 0;
    string Name = "Паралелепипед";
 
    //Перегрузка операции вывода из потока
    friend ostream& operator<<(ostream& cout, Parallelepiped& a)
    {
        a.print(); // вызов виртуального метода
        return cout;
    }
public:
    Parallelepiped();
    Parallelepiped(string Name, int Volume, int a, int b, int c);
 
    // переопределение виртуального метода
    virtual void print();
    double findVolume();
 
    //Геттеры
    int getA();
    int getB();
    int getC();
 
    //Сеттеры
    void setA(int a);
    void setB(int b);
    void setC(int c);
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2023, 19:14
Ответы с готовыми решениями:

Написать классы-наследники для базового класса описывающего параллелепипед
Написать классы-наследники для базового класса описывающего параллелепипед (в скобках признак, уникальный для каждого класса): куб (длина,...

Разработать консольное приложение, содержащее базовый класс Animal. От базового класса наследуются классы Cat и Dog
Разработать консольное приложение, содержащее базовый класс Animal с защищенным методом WriteSound(string sound), записывающим строку в...

Классы точка, круг, элипс
Добрый вечер) начну с задания: Создать класс точка, имеющая координаты. Класс эллипсов, и класс кругов. Определить иерархию типов....

5
фрилансер
 Аватар для Алексей1153
6461 / 5663 / 1130
Регистрация: 11.10.2019
Сообщений: 15,079
30.05.2023, 19:18
Цитата Сообщение от foget Посмотреть сообщение
Не могу найти ошибку
зачем её искать, все ошибки написал в окне вывода компилятор. Например
In file included from main.cpp:2:
Figure.h:24:5: error: virtual functions cannot be friends
24 | virtual friend ostream& operator<<(ostream& cout, Figure& a);
| ^~~~~~~ ~~~~~~
Figure.h:24:29: error: ‘std::ostream& Figure::operator<<(std::ostream&, Figure&)’ must have exactly one argument
24 | virtual friend ostream& operator<<(ostream& cout, Figure& a);
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,227
30.05.2023, 19:21
Цитата Сообщение от foget Посмотреть сообщение
Не могу найти ошибку в коде, изза которой компилятор ругается.
Как это "не могу найти "? Компилятор же всегда показывает, в какой строке ошибка.
0
фрилансер
 Аватар для Алексей1153
6461 / 5663 / 1130
Регистрация: 11.10.2019
Сообщений: 15,079
30.05.2023, 19:42
Цитата Сообщение от foget Посмотреть сообщение
const int size = 2;
    Figure* figures[size];
размер массива 2,
Цитата Сообщение от foget Посмотреть сообщение
figures[2] = Parall;
а пишешь третий элемент.

Но программа падает раньше - на строке
Цитата Сообщение от foget Посмотреть сообщение
Elips* Elipsoid = new Elips(4, 6, 8);
ещё пока не понял, почему

Добавлено через 4 минуты
собственно, вот эпик
C++
1
2
Elips::Elips(int a, int b, int c) :
    Figure(Name, Volume)
Name, Volume - и так являются полями Figure. К тому же, они ещё не инициализированы в этой точке
0
0 / 0 / 0
Регистрация: 07.12.2022
Сообщений: 35
30.05.2023, 19:42  [ТС]
Всё, увидел, спасибо большое
0
фрилансер
 Аватар для Алексей1153
6461 / 5663 / 1130
Регистрация: 11.10.2019
Сообщений: 15,079
30.05.2023, 19:51
foget, в коде ещё много лишнего и загадочного. Например, зачем поле std::string Name во всех классах, а не только в самом базовом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2023, 19:51
Помогаю со студенческими работами здесь

Классы Point и Figure в консольном приложении
Создать клас Point и Figure. Клас Point должен содержать два целочисельных поля и одно строковое поле. Создать три свойства с одним...

Создать классы Point и Figure в консоли
Уважаемые форумчане, получил домашнее задание: Создайте проект по шаблону Console Application . Требуется: Создать классы Point и...

Реализовать иерархию классов, где три класса описывающих поведение транспортные средства. Все три класса наследуются
Реализовать иерархию классов, где три класса описывающих поведение транспортные средства. Все три класса наследуются в с++

Реализовать классы Triangle и Circle унаследованные от Figure
Создайте класс Figure с полями a, b и c. Реализуйте классы Triangle и Circle, унаследованные от Figure, с помощью protected-наследования....

Не наследуются protected члены базового класса
Здравствуйте, имеется класс ListData, описывающий информационные поля односвязного списка: class ListData{ protected: int data; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru