Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

Функции сравнения - C++

04.09.2012, 15:55. Просмотров 1213. Ответов 8
Метки нет (Все метки)

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

Какой вариант более оптимальный:
1. Определить в лоб, только функции == и > , а остальные через них (см.пример ниже).
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
bool HugeInteger::isEqualTo(const HugeInteger &ob2){
    int i;
    
    if (sgn != ob2.sgn) return false;
    
    for(i = MAX_SIZE - 1; i>=0; i--)
        if(num[i] != ob2.num[i]) break;
    
    return (i >= 0 ? false: true);
}
bool HugeInteger::isNotEqualTo(const HugeInteger &ob2){
    return !isEqualTo(ob2);
}
bool HugeInteger::isGreaterThan(const HugeInteger &ob2){
    int i;
    
    if(sgn < ob2.sgn) return false;
    else if(sgn > ob2.sgn) return true;
    else if(sgn && ob2.sgn){
        for(i=0; i<MAX_SIZE; i++){
            if(num[i] > ob2.num[i]) return true;
            else if(num[i] < ob2.num[i]) return false;
        }
    }else if(!sgn && !ob2.sgn){
        for(i=0; i<MAX_SIZE; i++){
            if(num[i] < ob2.num[i]) return true;
            else if(num[i] > ob2.num[i]) return false;
        }
    }
 
    return false;
}
bool HugeInteger::isLessThan(const HugeInteger &ob2){
    return !isGreaterThan(ob2) && !isEqualTo(ob2);
}
bool HugeInteger::isGreaterThanOrEqualTo(const HugeInteger &ob2){
    return isGreaterThan(ob2) || isEqualTo(ob2);
}
bool HugeInteger::isLessThanOrEqualTo(const HugeInteger &ob2){
    return !isGreaterThan(ob2);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2012, 15:55     Функции сравнения
Посмотрите здесь:

Шаблон функции сравнения для qsort() - C++
Хочу отсортировать массив из int и из double с помощью qsort(). Для этого необходимо определить функцию сравнения элементов. Думал...

сравнения строк - C++
Всем привет !! столкнулся с проблемой сравнения строки, объясните пожалуйста как правильно сравнить строки на етом примере ...

Символы сравнения - C++
Приветствую. Пдскажите, пожалуйста, что означают символы сравнения &quot;:&quot; и &quot;?&quot; в контексте: while (x &gt; 0) { x -= div, ...

Счетчик сравнения - C++
куда его ставить?он ставиться перед if или после if?else и else if тоже ставим счетчик сравнения?while и do while?

сделать сравнения - C++
Вот программа: #include&amp;lt;iostream&amp;gt; #include&amp;lt;conio.h&amp;gt; #include &amp;lt;math.h&amp;gt; using namespace std;class rational { ...

сделать сравнения - C++
как сделать сравнение? Не могу понять. Пожалуйста, помогите. Задание: Рациональная (несократимая) дробь представляется парой целых...

Сравнения символа - C++
Как сравнить символ из массива с символом &quot;;&quot; Так не получается: if(buffer==&quot;;&quot;)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
04.09.2012, 15:59     Функции сравнения #2
bgm313, этож лаба, а не сурёзное приложение. Как компилится так и делай)
А реально, первый вариант типа круче.

Не по теме:

Ждем-с когда набигут и будут корованы грабить



Ну можно еще поперегружать операторы.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.09.2012, 16:00     Функции сравнения #3
Лучше в каждой функции сделайте сначала несколько простых проверок, чтобы быстро отбросить тривиальные случаи (числа разных знаков, разной длины, сравнение с нулём и т. п.), потом уже полную серьёзную проверку (её можно сделать в какой-то одной функции и вызывать из других).
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 16:04  [ТС]     Функции сравнения #4
Сомнения вызывают следующие факты:
Если тело каждой функции определить в лоб, тогда программа быдут работать быстрее, не будут вызываться другие функции. С другой стороны 1 вариант, при необходимости легче видоизменять.
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
04.09.2012, 16:05     Функции сравнения #5
bgm313, перегрузка операторов. Смотрится красиво, и работает эффективно.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
04.09.2012, 16:06  [ТС]     Функции сравнения #6
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
сравнение с нулём
Сравнение с нулём так, де требует проверки всего массива чаров из 40 элементов в моей программе. Может быть, как -то можно сделать так, чтобы не требовалось проверять весь массив?

Добавлено через 43 секунды
Цитата Сообщение от Invader_Zim Посмотреть сообщение
bgm313, перегрузка операторов
Я понимаю, но пока нужны только функции.
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
04.09.2012, 16:34     Функции сравнения #7
Цитата Сообщение от bgm313 Посмотреть сообщение
Может быть, как -то можно сделать так, чтобы не требовалось проверять весь массив?
Я когда делал класс больших целых чисел объявлял еще атрибут класса, который хранил количество значащих разрядов ( где один разряд = 1 элемент массива). Сравнение при этом выглядит проще. Обход всего массива будет произведен только в случаях, когда количество значащих разрядов будет равно максимальному числу разрядов, и когда сравниваемые операнды различаются меньше чем на максимальное значение разряда.

Например, сравнение <:
1. сравниваем знаки
2. при равенстве знаков сравниваем количество значащих разрядов
3. при равенстве количества значащих разрядов сравниваем разряды числа начиная с самого значащего (при первом же несоответствии делаем соответствующий вывод)

И при таком раскладе сравнение с нулем тоже будет очень простой операцией. Нуль это либо число с количеством значащих разрядов равным нулю, либо число с одним разрядом, значение которого равно нулю, в зависимости от представления нуля.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.09.2012, 22:01     Функции сравнения #8
bgm313, вообще, есть такая хорошая концепция - повторное использование кода. Она означает, что если в программе уже реализован функционал A и функционал B можно реализовать через функционал A напрямую или путём комбинации с каким-либо другим функционалом, то это обязательно стоит применить. Дублирование кода ни к чему хорошему не ведёт, с другой стороны, ради эффективности оно может быть выполнено компилятором самостоятельно (inline-функции), что на самом коде никак не отразится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 22:39     Функции сравнения
Еще ссылки по теме:

Перегрузка оператора сравнения - C++
Скажите, как перегрузить оператор сравнения == и другие? попробовал bool operator == (char* A,char* B) выдает : оператору ,не являющемуся...

Перегрузка операторов сравнения - C++
Вот этот класс. Помогите пожалуйста. #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstring&gt; using namespace std; ...

Последовательность сравнения выражения - C++
Здравствуйте. Простой код. Скажите, в какой последовательности будет сравниваться выражение i!=j&lt;k) Я ввожу 12,12,12 и оно мне Гуд...

Функция сравнения площади - C++
Сравнить площади колец, внутренние радиусы которых равны г1, r2, а внешний — заданному числу R (R &gt; r1 и R&gt;r2).

Не перегружаются операторы сравнения - C++
Вот мой код: #ifndef COMMUN_H #define COMMUN_H #include &lt;string&gt; #include &lt;cstdlib&gt; using namespace std;


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
08.09.2012, 22:39     Функции сравнения #9
Цитата Сообщение от bgm313 Посмотреть сообщение
Определить в лоб, только функции == и > , а остальные через них
Достаточно перегрузить в своём классе операторы < и ==, остальное в принципе уже придумано. Но есть свои тонкости, читайте внимательнее...
Yandex
Объявления
08.09.2012, 22:39     Функции сравнения
Ответ Создать тему
Опции темы

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