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

Переопределённый оператор возвращает какие то цифры вместо bool - C++

Восстановить пароль Регистрация
 
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
01.11.2012, 00:30     Переопределённый оператор возвращает какие то цифры вместо bool #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
class Edge {//Класс ребро. Массив будет хранится списком рёбер.
        double weight;
        T Node1, Node2;
        public:
        Edge(T Node1, T Node2, double weight) {
               this->Node1 = Node1;
               this->Node2 = Node2;
               this->weight = weight;
        }   
        bool operator >(Edge *e1) {
            return (this->weight > e1->weight);
        }
        bool operator <(Edge *e1) {
            return (this->weight < e1->weight);
        }
        bool operator <=(Edge *e1) {
            return !(this>e1);
        }
        bool operator >=(Edge *e1) {
            return !(this<e1);
        }
        bool operator ==(Edge *e1) {
            return (this->weight == e1->weight);
        }
        bool operator !=(Edge *e1) {
            return !(this == e1);
        }
    };
Когда пытался сортировать список рёбер по весу, используя переопределённые операторы, выяснил, что они не работают.
C++
1
2
3
Edge *g[N*N];//Массив рёбер.
//инициализация...
cout<<g[0]==g[1];
На такое код возвращает: 00145Е58. Массив дебажил, все объекты нормально создались и значения проинициализировались. Подскажите в чём ошибка или хотя бы ссылку на литературу. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 00:30     Переопределённый оператор возвращает какие то цифры вместо bool
Посмотрите здесь:

C++ Какие значения возвращает функция анализа символов?
не работает bool xor(bool a, bool b) C++
C++ что возвращает cast оператор?
Оператор bool неправельно работает! C++
C++ Тип bool возвращает 1,а не true
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.11.2012, 00:35     Переопределённый оператор возвращает какие то цифры вместо bool #2
ALL_ZZ, потому что вы сравниваете указатели. Вы создали не массив объектов, а массив указателей на объект.
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
01.11.2012, 00:37  [ТС]     Переопределённый оператор возвращает какие то цифры вместо bool #3
Но в переопределении оператора я в качестве входных данных указал ссылки на объекты, разве не так?
C++
1
bool operator ==(Edge *e1)
У меня как раз были подозрения по поводу левого операнда. Я пытался сделать оператор с двумя входными параметрами, но Visual Studio ругается (хотя в примерах в инете есть такое).
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.11.2012, 00:42     Переопределённый оператор возвращает какие то цифры вместо bool #4
И да - выводится адрес, а не результат сравнения адресов, потому что у операции == приоритет меньше чем у <<. Заключите это выражение в скобки.

Добавлено через 3 минуты
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
Но в переопределении оператора я в качестве входных данных указал ссылки на объекты, разве не так?
Вы передаете объект по указателю а не по ссылке. Это не верно. Прототип должен выглядеть так:
C++
1
bool operator==( const Edge &e1 ) const;
Это первое.
Второе: без разницы как Вы перегрузили операторы. Для доступа к объекту нужно разыменовывать указатель, или создавайте именно массив объектов. Как я понял после создания массива указателей Вы не создавали сами объекты?
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
01.11.2012, 00:43  [ТС]     Переопределённый оператор возвращает какие то цифры вместо bool #5
Создал конечно, я же написал, что объекты существуют и значения записаны.
Выводится адрес? Мне говорили, что адрес вообще никогда и ни при каких условиях не выводится из соображений безопасности.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.11.2012, 00:47     Переопределённый оператор возвращает какие то цифры вместо bool #6
Тогда сравнение должно происходить так:
C++
1
cout << ( *g[ 0 ] == *g[ 1 ]);
Это с учетом правильной перегрузки оператора.

Добавлено через 1 минуту
Сама реализация будет выглядеть так:
C++
1
2
3
bool operator ==( const Edge &e1 ) const {
   return ( weight == e1.weight );
}
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
01.11.2012, 00:52  [ТС]     Переопределённый оператор возвращает какие то цифры вместо bool #7
Вроде работает, спасибо. Но как всё таки сделать, чтобы можно было сравнивать как обычно (g[1] == g[0]) и элементами массива были ссылки?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.11.2012, 01:02     Переопределённый оператор возвращает какие то цифры вместо bool #8
ALL_ZZ, создавать массив объектов а не массив указателей.
Первый вариант - статический массив:
C++
1
2
const int n = 100;
Edge array[ n ];
Второй вариант - динамический массив:
C++
1
2
int n = 100;
Edge *array = new Edge [ n ];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2012, 01:08     Переопределённый оператор возвращает какие то цифры вместо bool
Еще ссылки по теме:

C++ перегруженный оператор возвращает двумерный массив
Оператор равенства возвращает не то значение C++
C++ Изменить значение bool a = true в bool a = false

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

Или воспользуйтесь поиском по форуму:
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
01.11.2012, 01:08  [ТС]     Переопределённый оператор возвращает какие то цифры вместо bool #9
Я так и сделал, когда намучался с операторами) Спасибо за помощь.
Yandex
Объявления
01.11.2012, 01:08     Переопределённый оператор возвращает какие то цифры вместо bool
Ответ Создать тему
Опции темы

Текущее время: 09:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru