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

Разработать программу, тестирует и иллюстрирует правильность перегрузки операций

20.10.2021, 21:45. Показов 912. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем добрый вечер.

Нужна ваша помощь.

Вот задание.

1. Продумать, стандартные операции могут быть определены для класса.

2. Продумать интерпретацию этих операций для разрабатываемого класса.

3.Улучшить интерфейс класса, дополнив его функциями, перегружают те или иные операции. Часть перегрузочных функций реализовать как члены-функции, другие - как дружественные функции.

4. Для организации доступа и инициализации данных класса перегрузить операции "[]" и / или "()". Данные операции можно не перегружать для стеков, очередей, колец.

5. Перегрузить операции "==" и "! =" Для сравнения объектов на равенство и на неравенство. Для сущностей, на множестве которых определено отношение порядка, перегрузить операции ">" и "<" или "> =" и "<=".

6. Перегрузить операции ">>" и "<<" для ввода-вывода.

7. Разработать программу, тестирует и иллюстрирует правильность перегрузки операций.


А вот программы которые нужно сделать по заданию.
1.

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
#include <cmath>
#include <iomanip>
#include <iostream>
 
struct Point {
    double x;
    double y;
};
 
class Circle {
public:
    Circle(const Point& center, double radius) : center{ center }, radius{ radius } {}
    const Point& getCenter() const {
        return center;
    }
    double getRadius() const {
        return radius;
    }
    double getArea() const {
        return M_PI * radius * radius;
    }
private:
    Point center;
    double radius;
};
 
int main(int argc, char** argv) {
    Circle c{ {1, 1}, 5 };
    std::cout << "Area: " << c.getArea() << std::endl;
 
    return 0;
}
2.

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
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <ostream>
#define _USE_MATH_DEFINES
#include <math.h> // число pi
 
struct Point {
    double x;
    double y;
};
class Circle {
public:
    Circle(const Point& center, double radius) : center{ center }, radius{ radius } {}
    const Point& getCenter() const {
        return center;
    }
    double getRadius() const {
        return radius;
    }
    double getArea() const {
        return M_PI * radius * radius;
    }
private:
    Point center;
    double radius;
};
 
Circle getDoubled(const Circle& c) {
    double doubledArea = c.getArea() * 2;
    double newRadius = std::sqrt(doubledArea / M_PI);
    return { c.getCenter(), newRadius };
}
 
std::ostream& operator<<(std::ostream& out, const Point& p) {
    return out << "Point{x=" << p.x << ", y=" << p.y << "}";
}
 
std::ostream& operator<<(std::ostream& out, const Circle& c) {
    return out << "Circle{center=" << c.getCenter() << ", radius=" << c.getRadius() << ", area=" << c.getArea() << "}";
}
 
int compare(const Circle& a, const Circle& b) {
    if (a.getRadius() < b.getRadius()) {
        return -1;
    }
    else if (a.getRadius() > b.getRadius()) {
        return 1;
    }
    else {
        return 0;
    }
}
int main(int argc, char** argv) {
    Circle c{ {1, 1}, 5 };
    std::cout << c << std::endl;
    Circle b = getDoubled(c);
    std::cout << b << std::endl;
    std::cout << compare(c, b) << std::endl;
    return 0;
}
3.

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 <iostream>
 
class Circle
{
    friend bool operator==(const Circle& lhs, const Circle& rhs);
    friend bool operator!=(const Circle& lhs, const Circle& rhs);
    friend bool operator<(const Circle& lhs, const Circle& rhs);
    friend bool operator>(const Circle& lhs, const Circle& rhs);
 
public:
    Circle() : Circle(0.0, 0.0, 1.0) {}
    Circle(double ix, double iy, double iradius) :
        x(ix), y(iy), radius(iradius) {}
    void info();
private:
    double x;
    double y;
    double radius;
};
void Circle::info()
{
    std::cout << "Center: " << x << ", " << y << std::endl;
    std::cout << "Radius: " << radius << std::endl;
}
 
bool operator==(const Circle& lhs, const Circle& rhs)
{
    return lhs.radius == rhs.radius;
}
 
bool operator!=(const Circle& lhs, const Circle& rhs)
{
    return !(lhs == rhs);
}
 
bool operator<(const Circle& lhs, const Circle& rhs)
{
    return lhs.radius < rhs.radius;
}
 
bool operator>(const Circle& lhs, const Circle& rhs)
{
    return rhs < lhs;
}
int main()
{
    Circle c1, c2(5.0, 2.0, 3.0);
 
    c1.info();
    c2.info();
 
    if (c1 < c2)
    {
        std::cout << "c1 < c2\n";
    }
    else if (c1 == c2)
    {
        std::cout << "c1 = c2\n";
    }
    else
    {
        std::cout << "c1 > c2\n";
    }
 
    return 0;
}
Заранее благодарю всех за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2021, 21:45
Ответы с готовыми решениями:

Разработать программу, которая тестирует и иллюстрирует правильность перегрузки операций
Всем здравствуйте. Спасибо что решили мне помочь, я это очень ценю. Задачу поставили сложную. Вот сами задания : 1....

Разработать программу, которая тестирует ячейки памяти с 0900Н до 09FF
Разработать программу, которая тестирует ячейки памяти с 0900Н до 09FF. Тестирование осуществляется путем записи числа FFH во все ячейки, и...

Разработать программу с использованием перегрузки методов
Реализовать сложение двух чисел и массива чисел.

5
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2021, 23:16
Цитата Сообщение от RUSNORD Посмотреть сообщение
Заранее благодарю всех за помощь.
А вопрос в чем ?
0
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 54
20.10.2021, 23:21  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
А вопрос в чем ?
Надо 3 программы прогнать по 6 заданиям.

А, 7 задание надо программу сделать.

1. Продумать, стандартные операции могут быть определены для класса.

2. Продумать интерпретацию этих операций для разрабатываемого класса.

3.Улучшить интерфейс класса, дополнив его функциями, перегружают те или иные операции. Часть перегрузочных функций реализовать как члены-функции, другие - как дружественные функции.

4. Для организации доступа и инициализации данных класса перегрузить операции "[]" и / или "()". Данные операции можно не перегружать для стеков, очередей, колец.

5. Перегрузить операции "==" и "! =" Для сравнения объектов на равенство и на неравенство. Для сущностей, на множестве которых определено отношение порядка, перегрузить операции ">" и "<" или "> =" и "<=".

6. Перегрузить операции ">>" и "<<" для ввода-вывода.

7. Разработать программу, тестирует и иллюстрирует правильность перегрузки операций.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.10.2021, 23:31
Цитата Сообщение от RUSNORD Посмотреть сообщение
Point
Цитата Сообщение от RUSNORD Посмотреть сообщение
class Circle
а это все откуда, вы дали неполное задание, верно ?

Добавлено через 1 минуту
То есть до етих классов приделать все попунктуам ? так ? ну делайте по пунктам, что в пункте не получается - пишите. За вас все это делать никто не будет.

Добавлено через 2 минуты
И еще, не пользуйтесь гугл переводом для перевода из укр на ру, лучше попросите родителей.

Добавлено через 2 минуты
Цитата Сообщение от RUSNORD Посмотреть сообщение
Разработать программу, тестирует
ммм...
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
21.10.2021, 01:43
Лучший ответ Сообщение было отмечено RUSNORD как решение

Решение

Цитата Сообщение от SmallEvil Посмотреть сообщение
За вас все это делать никто не будет.
Эт вы погорячились. Мне конкуренция на рынке труда ни к чему. Зарплата падать начнёт.


Цитата Сообщение от RUSNORD Посмотреть сообщение
Надо 3 программы прогнать по 6 заданиям.
Прогнать. Бггг. Какой слог. Как ворон с поля.
"Кыш, программы, кыш!"

О. Да этож мой кодец из другого треда! Как неожиданно и приятно. )

За чтож вы так его в конце?!

Вот, набросал для вас:
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
122
123
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <ostream>
#define _USE_MATH_DEFINES
#include <cmath> // число pi
 
struct Point {
    double x;
    double y;
};
class Circle {
public:
    Circle(const Point& center, double radius) : center{ center }, radius{ radius } {}
    const Point& getCenter() const {
        return center;
    }
    double getRadius() const {
        return radius;
    }
    double getArea() const {
        return M_PI * radius * radius;
    }
    /**
     * Returns circle of doubled radius, member-function operator
     */
    Circle operator*(double amount) const {
        return { getCenter(), getRadius()*amount };
    }
 
    /**
     * Let's make it access private fields.
     */
    template<class Function>
    friend Function &operator>>(Function &f, Circle &c);
 
    /**
     * Let's do operator(), just because.
     */
    Circle operator()(const Point &at) const {
        return { at, getRadius() };
    }
private:
    Point center;
    double radius;
};
 
/**
 * Returns circle of doubled area
 */
Circle operator*(double amount, const Circle &c) {
    // since it is friend function, we can address private members
    return { c.getCenter(), std::sqrt((c.getArea() * amount) / M_PI) };
}
 
std::ostream& operator<<(std::ostream& out, const Point& p) {
    return out << "Point{x=" << p.x << ", y=" << p.y << "}";
}
 
std::ostream& operator<<(std::ostream& out, const Circle& c) {
    return out << "Circle{center=" << c.getCenter() << ", radius=" << c.getRadius() << ", area=" << c.getArea() << "}";
}
 
int compare(const Circle& a, const Circle& b) {
    if (a.getRadius() < b.getRadius()) {
        return -1;
    }
    else if (a.getRadius() > b.getRadius()) {
        return 1;
    }
    else {
        return 0;
    }
}
 
/**
 * These are kinda obvious... just for fun, circles are compared only by radius
 */
bool operator==(const Circle &a, const Circle &b) {
    return compare(a, b) == 0;
}
 
bool operator!=(const Circle &a, const Circle &b) {
    return compare(a, b) != 0;
}
 
/**
 * now let's get serious.
 * this operator assigns result of Function call to each Circle constructor argument
 * can be useful for generating random circles
 * this should not be done in prod, but for tutorial should be k.
 */
template<class Function>
Function &operator>>(Function &f, Circle &c) {
    c.radius = f();
    c.center.x = f();
    c.center.y = f();
    return f;
}
 
int main(int argc, char** argv) {
    std::srand(std::time(nullptr));
 
    auto random = []() {
        return std::rand() % 21;
    };
 
    Circle c{ {1, 1}, 5 };
 
    // let's make it random, using operator>>:
    random >> c;
    std::cout << c << std::endl;
    std::cout << "Doubled radius: " << c * 2 << std::endl;
    std::cout << "Doubled area: " << 2 * c << std::endl;
    std::cout << "Moved to 0, 0: " << c({0, 0}) << std::endl;
 
    Circle b = 2 * c; // but not c * 2!
    std::cout << "Comparing " << c << " and " << b << compare(c, b) << std::endl;
    std::cout << "Is " << c << " == " << b << "? " << (c == b) << std::endl;
    std::cout << "Is " << c << " != " << b << "? " << (c != b) << std::endl;
    return 0;
}
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 54
21.10.2021, 07:22  [ТС]
Спасибо Вам огромное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2021, 07:22
Помогаю со студенческими работами здесь

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

Перегрузки операций
Создать класс действительные числа. Определить операцию - как метод класса и бинарную операцию - как дружественную функцию. Класс должен...

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

Разработать программу,автоматизирующую выполнение различных операций с матрицами
Помогите пожалуйста с программой по матрицам.Нашёл у Вас на сайте программу.И нужна помощь,чтобы матрица была не постоянной,а любой...

Разработать программу, автоматизирующую выполнение различных операций с матрицами.
Разработать программу, автоматизирующую выполнение различных операций с матрицами. Предусмотреть возможность ввода матрицы любой...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru