Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как перегрузить оператор "==" ?

17K
14 октября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
Требуется сравнивать структуры. Как я понял из умной книги, если переопределить оператор "==" для класса SampleClass следующим образом:
 
Код:
class SampleClass {
    public:
        bool operator== (SampleClass *sc){
            return true;
        }
};

то можно будет сравнивать разные экземпляры классов:
 
Код:
bool test_compare(SampleClass *pmc, SampleClass() *pmc2){
    return pmc == pmc2;
}

и по идее программа должна вернуть true, но она сравнивает указатели, к оператору не обращается и возвращает, соответственно false.
Видел еще одну форму записи оператора ==:
 
Код:
bool operator== (SampleClass *sc, SampleClass *sc)

компилятор не воспринимает ее ни как статическую функцию, ни как член класса, говорит
Цитата:
‘bool SampleClass::operator==(SampleClass*, SampleClass*)’ must take exactly one argument



Как же быть?

5.4K
14 октября 2006 года
Svyatozar
221 / / 11.09.2006
что за книга такая?
если объявляешь вне класса то так:

bool operator== (SampleClass &sc1, SampleClass &sc2)

Если внутри класса, то так:

bool operator== (SampleClass &other)
309
16 октября 2006 года
el scorpio
1.1K / / 19.09.2006
Если вызывать операторы для указателя на объект, то они будут выполнять простые арифметическо-логические операции с адресами объекта.
А вообще, в функции и методы структуры указателями не передаются. Для передачи параметров на подобные объекты существуют ссылки.

Svyatozar
Не совсем корректно, поскольку при сравнении ни сам объект, ни другой не изменяются, их желательно объявить константными
Правильнее будет следующее
Код:
struct TMyStruct
{
//... Поля структуры
bool operator == (const TMyStruct &Other) const; //Объявление
};
//...
bool TMyStruct::operator == (const TMyStruct &Other) const
{
return (this->Поле == Other.Поле); // Реализация сравнения
}

void Function (const TMyStruct &Ref) // Использование объекта
{
TMyStruct Obj;
//...
if (Ref == Obj)
    Делать_что-нибудь;
}
5.4K
16 октября 2006 года
Svyatozar
221 / / 11.09.2006
верно, лучше через const:

bool operator ==(const SampleClass &sc1, const SampleClass &sc2) {
// ...
}

или если внутри класса то так:

bool operator ==(const SampleClass &other) const {
//...
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог