Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
GeFacle
Рэмбо комнатный
92 / 95 / 32
Регистрация: 05.03.2017
Сообщений: 505
Завершенные тесты: 4
#1

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

02.07.2017, 10:25. Просмотров 149. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2017, 10:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов для класса Треугольник (C++):

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

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

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

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

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

Класс "Дроби" и перегрузка операторов для этого класса - C++
Всем Доброго времени суток. Есть учебная задача по условиям которой необходимо реализовать класс &quot;Дроби&quot; и перегрузку операторов для...

11
igdev
73 / 62 / 14
Регистрация: 22.04.2016
Сообщений: 331
Завершенные тесты: 2
02.07.2017, 10:43 #2
GeFacle, В целом, все выглядит неплохо. Но все-таки рекомендую Вам, обьект класса передавать по ссылке, а сам метод сделать константым, чтобы обеспечить невозможность изменения этого обьекта по принципы наименьших привилегий.
C++
1
bool operator>(triangle &ob) const;
0
hoggy
6700 / 2882 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
02.07.2017, 11:01 #3
Цитата Сообщение от 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
Рэмбо комнатный
92 / 95 / 32
Регистрация: 05.03.2017
Сообщений: 505
Завершенные тесты: 4
02.07.2017, 11:05  [ТС] #4
hoggy, опять ты злой, у меня в примере так было в лекции(((
0
igdev
73 / 62 / 14
Регистрация: 22.04.2016
Сообщений: 331
Завершенные тесты: 2
02.07.2017, 11:11 #5
hoggy,
Цитата Сообщение от hoggy Посмотреть сообщение
это - тоже в мусорку:
нарушение граммар-конст
отсутствие спецификации об исключениях
Ну, а как тогда будет правильно? Вот так?
C++
1
bool operator>(const triangle &ob);
0
hoggy
6700 / 2882 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
02.07.2017, 11:13 #6
Цитата Сообщение от GeFacle Посмотреть сообщение
у меня в примере так было в лекции
я конечно понимаю,
что у нас не самая идеальная система образования.

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

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

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

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

C++
1
bool operator>(const triangle&) const noexcept;
1
GeFacle
Рэмбо комнатный
92 / 95 / 32
Регистрация: 05.03.2017
Сообщений: 505
Завершенные тесты: 4
02.07.2017, 11:24  [ТС] #7
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
6700 / 2882 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
02.07.2017, 11:29 #8
Цитата Сообщение от GeFacle Посмотреть сообщение
запускал, все норм работало
вы своё барахло запустить попробуйте.
потому что в "файле лекции" нет того фатального косяка,
который допустили вы.
0
GeFacle
Рэмбо комнатный
92 / 95 / 32
Регистрация: 05.03.2017
Сообщений: 505
Завершенные тесты: 4
02.07.2017, 11:39  [ТС] #9
hoggy, ну объясните мне, что у меня за косяк, у меня просто все спокойно работает
0
hoggy
6700 / 2882 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
02.07.2017, 11:46 #10
Цитата Сообщение от GeFacle Посмотреть сообщение
ну объясните мне, что у меня за косяк
попробуйте позвать функцию max.
дальше вам все линкер объяснит.

Цитата Сообщение от GeFacle Посмотреть сообщение
у меня просто все спокойно работает
не существует понятие "у меня".
существует конкретный код.
0
GeFacle
Рэмбо комнатный
92 / 95 / 32
Регистрация: 05.03.2017
Сообщений: 505
Завершенные тесты: 4
02.07.2017, 12:03  [ТС] #11
hoggy, исправьте ошибку, пожалуйста, без понятия где она
0
Nemovok
237 / 84 / 34
Регистрация: 30.10.2015
Сообщений: 521
Завершенные тесты: 1
02.07.2017, 23:49 #12
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
02.07.2017, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2017, 23:49
Привет! Вот еще темы с ответами:

Перегрузка операторов для класса "множество целых чисел" - C++
Собственно, в этом и вопрос. Как перегрузить операторы &quot;+&quot; и &quot;-&quot; для объединение и разности двух множеств?

Перегрузка операторов (==, <<, >>, +) для класса "Денежная сумма" - C++
Реализовать класс «Денежная сумма». Данные класса: размер суммы, код валюты, курс по отношению к доллару. Операции: сложение двух сумм,...

Перегрузка операторов ==, !=, <, > для класса "Дробь" - C++
Не могу найти ошибку, почему то числитель второй дроби увеличивается... Думал может что-то с конструкторами, но вроди все ок... Алгоритмы...

Перегрузка операторов для класса "Матрица" - C++
Доброго времени суток. Помогите довести до ума код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;math.h&quot;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru