Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511

Перегрузка операторов для класса Треугольник

02.07.2017, 10:25. Показов 4587. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Перегрузить операторы >, <, == для класса Треугольник относительно сравнения площадей объектов
данного класса. Сделать то же самое для класса Квадрат. Создать шаблонную функцию нахождения максимума из трех объектов. Применить эту функцию к числам, символам и объектам созданных классов.
Заголовочный файл:
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 <cmath>
 
class triangle
{
private:
    int a, b, c;
    double square;
public:
    triangle() { a = b = c = 0; square = 0; }
    triangle(int A, int B, int C) { a = A; b = B; c = C; double p = (double)(a + b + c) / 2; square = pow((p*(p - a)*(p - b)*(p - c)), 0.5); }
    bool operator>(triangle ob);
    bool operator==(triangle ob);
    bool operator<(triangle ob);
};
 
class Square
{
private:
    int a;
    int square;
public:
    Square() { a = 0; square = 0; }
    Square(int A) { a = A; square = a*a * 6; }
    bool operator>(Square ob);
    bool operator==(Square ob);
    bool operator<(Square ob);
};
 
template <class X> X max(X x, X y);
 
template <class X> void max(X x, X y, X z);
Файл с реализацией:
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
#include "Header.h"
 
bool triangle::operator>(triangle ob)
{
    if (square > ob.square)
        return true;
    else
        return false;
}
bool triangle::operator==(triangle ob)
{
    if (square == ob.square)
        return true;
    else
        return false;
}
bool triangle::operator<(triangle ob)
{
    if (square < ob.square)
        return true;
    else
        return false;
}
//////////////////////////////
bool Square::operator>(Square ob)
{
    if (square > ob.square)
        return true;
    else
        return false;
}
bool Square::operator==(Square ob)
{
    if (square == ob.square)
        return true;
    else
        return false;
}
bool Square::operator<(Square ob)
{
    if (square < ob.square)
        return true;
    else
        return false;
}
////////////////////////////////////
template <class X> X max(X x, X y)
{
    if (x > y)
        return x;
    else
    {
        return y;
    }
}
 
template <class X> void max(X x, X y, X z)
{
    if (x == max(max(x, y), max(y, z)))
    {
        cout << "1st" << endl;
    }
    else if (y == max(max(x, y), max(y, z)))
    {
        cout << "2nd" << endl;
    }
    else if (z == max(max(x, y), max(y, z)))
    {
        cout << "3rd" << endl;
    }
}
Добавлено через 2 минуты
Все правильно сделал?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2017, 10:25
Ответы с готовыми решениями:

Перегрузка операторов для класса
class A { private: size_t i; public: size_t i_get() { return i; } };

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

Перегрузка операторов для класса Array
Здравствуйте, у меня есть созданный класс array, для него нужно перегрузить операторы &lt;&lt;. &gt;&gt;, =, ==, !=, , +, -, / и *. У...

11
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
02.07.2017, 10:43
GeFacle, В целом, все выглядит неплохо. Но все-таки рекомендую Вам, обьект класса передавать по ссылке, а сам метод сделать константым, чтобы обеспечить невозможность изменения этого обьекта по принципы наименьших привилегий.
C++
1
bool operator>(triangle &ob) const;
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2017, 11:01
Цитата Сообщение от igdev Посмотреть сообщение
В целом, все выглядит неплохо.
если не считать того, что код не собирается
(ошибки линкера как минимум)

Добавлено через 1 минуту
Цитата Сообщение от GeFacle Посмотреть сообщение
Все правильно сделал?
это только в мусорку.

Цитата Сообщение от igdev Посмотреть сообщение
bool operator>(triangle &ob) const;
это - тоже в мусорку:
нарушение граммар-конст
отсутствие спецификации об исключениях

Добавлено через 1 минуту
Цитата Сообщение от GeFacle Посмотреть сообщение
template <class X> void max(X x, X y, X z)
функция max, которая не возвращает максимальное >_<
0
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
02.07.2017, 11:05  [ТС]
hoggy, опять ты злой, у меня в примере так было в лекции(((
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
02.07.2017, 11:11
hoggy,
Цитата Сообщение от hoggy Посмотреть сообщение
это - тоже в мусорку:
нарушение граммар-конст
отсутствие спецификации об исключениях
Ну, а как тогда будет правильно? Вот так?
C++
1
bool operator>(const triangle &ob);
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2017, 11:13
Цитата Сообщение от GeFacle Посмотреть сообщение
у меня в примере так было в лекции
я конечно понимаю,
что у нас не самая идеальная система образования.

однако, в данном случае скорее всего вы привираете.
не может же быть лекция настолько долбанутой.
это все равно, что преподавать студентам,
что 2+2 будет 5

и уж точно даже не попытались
ни разу собрать/запустить свой собственный код.

иначе бы сейчас здесь была совсем другая тема.
что то вроде: "у меня тут что то не работает"
без указания точных ошибок, разумеется.

Добавлено через 1 минуту
Цитата Сообщение от igdev Посмотреть сообщение
bool operator>(const triangle &ob);

C++
1
bool operator>(const triangle&) const noexcept;
1
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
02.07.2017, 11:24  [ТС]
hoggy,
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
#include <iostream>
#include <math.h>
using namespace std;
class coord {
int x, y; //значения координат
public:
coord() { x = 0; y= 0; }
coord(int i, int j) { x = i; y = j; }
void get_xy(int &i, int &j) { i = x; j = y; }
float get_0_vector(){return sqrt(x*x+y*y);}//вычисление расстояния от этой точки до (0,0)
bool operator > (coord ob2); //перегрузка оператора >
bool operator < (coord ob2); //перегрузка оператора <
bool operator == (coord ob2); //перегрузка оператора ==
};
bool coord::operator>(coord ob2)
{ //если длина радиус-вектора первой точки больше длины радиус-вектора второй точки
 if (get_0_vector()>ob2.get_0_vector()) return true; //то возвращаем true
 return false ; // по умолчанию возвращаем false
}
bool coord::operator<(coord ob2)
{ //если длина радиус-вектора первой точки меньше длины радиус-вектора второй точки
 if (get_0_vector()<ob2.get_0_vector()) return true; //то возвращаем true
 return false ; // по умолчанию возвращаем false
}
bool coord::operator==(coord ob2)// по аналогии с предыдущими
{
 if (get_0_vector()==ob2.get_0_vector()) return true;
 return false ;
}
template <class X> void sravn(X obj1, X obj2)//шаблонная функция
{
 if (obj1>obj2) { cout<<"Первый объект больше"<<endl; return;}
 if (obj1<obj2) { cout<<"Второй объект больше"<<endl; return;}
 if (obj1==obj2) { cout<<"Объекты равны"<<endl; return;}
}
int main()
{ coord o1(1,2), o2(2,2), o3;
23
int x=70, y=9;
float a=3.6, b=3.8;
cout<<"o1="<<o1.get_0_vector()<<" o2="<<o2.get_0_vector()<<endl;
 sravn(o1,o2); //сравнение точек
cout<<"o1="<<x<<" o2="<<y<<endl;
 sravn(x,y); //сравнение целых
cout<<"o1="<<a<<" o2="<<b<<endl;
 sravn(a,b); //сравнение вещественных
 
system("pause");
return 0;
}
это из файла лекции

Добавлено через 1 минуту
hoggy, и я запускал, все норм работало :/
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2017, 11:29
Цитата Сообщение от GeFacle Посмотреть сообщение
запускал, все норм работало
вы своё барахло запустить попробуйте.
потому что в "файле лекции" нет того фатального косяка,
который допустили вы.
0
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
02.07.2017, 11:39  [ТС]
hoggy, ну объясните мне, что у меня за косяк, у меня просто все спокойно работает
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2017, 11:46
Цитата Сообщение от GeFacle Посмотреть сообщение
ну объясните мне, что у меня за косяк
попробуйте позвать функцию max.
дальше вам все линкер объяснит.

Цитата Сообщение от GeFacle Посмотреть сообщение
у меня просто все спокойно работает
не существует понятие "у меня".
существует конкретный код.
0
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
02.07.2017, 12:03  [ТС]
hoggy, исправьте ошибку, пожалуйста, без понятия где она
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
02.07.2017, 23:49
GeFacle, для квадрата по аналогии:
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 <iostream>
#include <algorithm>
 
class Triangle
{
private:
    int a, b, c;
    double square;
public:
    Triangle();
    Triangle(const int first_side, const int second_side, const int third_side);
    bool operator>(const Triangle &triangle) const noexcept;
    bool operator<(const Triangle &triangle) const noexcept;
    bool operator==(const Triangle &triangle) const noexcept;
};
 
Triangle::Triangle()
    : a(0), b(0), c(0), square(0) {}
 
Triangle::Triangle(const int first_side, const int second_side, const int third_side)
    : a(first_side), b(second_side), c(third_side), square(/*You must do it.*/) {}
 
bool Triangle::operator>(const Triangle &triangle) const noexcept
{ return this->square > triangle.square; }
 
bool Triangle::operator<(const Triangle &triangle) const noexcept
{ return this->square < triangle.square; }
 
bool Triangle::operator==(const Triangle &triangle) const noexcept
{ return this->square == triangle.square; }
 
template<typename T>
T Max(const T &t1, const T &t2, const T &t3)
{
    return std::max(std::max(t1, t2), t3);
}
 
int main() 
{
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2017, 23:49
Помогаю со студенческими работами здесь

Перегрузка операторов для класса МАССИВ
Привет. Есть класс &quot;вектор&quot; (&quot;массив&quot;), нужно переопределить операторы =, +, - , *, +=, -=, *= с целым числом. =, +=, -=, *=, как...

Перегрузка операторов для класса polynom
Создаю класс полиномов (polynom), в нём надо перегрузить ряд операторов. Где-то нашёл пример, где оператор сложения перегружается так: ...

Перегрузка операторов для класса матриц
Собственно, суть проблемы. Пишу класс матриц (хочется), оператор присваивания работает только тогда, когда функция (ну или, например,...

Перегрузка операторов для класса не работают
Условие задачи:Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01...

Перегрузка операторов сравнения для класса Rational
Прохожу курс вот условие Еще одна важная группа операторов, которые полезно реализовать для класса рациональных чисел — это операторы...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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