class SampleClass {
public:
bool operator== (SampleClass *sc){
return true;
}
};
Как перегрузить оператор "==" ?
Код:
то можно будет сравнивать разные экземпляры классов:
Код:
bool test_compare(SampleClass *pmc, SampleClass() *pmc2){
return pmc == pmc2;
}
return pmc == pmc2;
}
и по идее программа должна вернуть true, но она сравнивает указатели, к оператору не обращается и возвращает, соответственно false.
Видел еще одну форму записи оператора ==:
Код:
bool operator== (SampleClass *sc, SampleClass *sc)
компилятор не воспринимает ее ни как статическую функцию, ни как член класса, говорит
Цитата:
‘bool SampleClass::operator==(SampleClass*, SampleClass*)’ must take exactly one argument
Как же быть?
если объявляешь вне класса то так:
bool operator== (SampleClass &sc1, SampleClass &sc2)
Если внутри класса, то так:
bool operator== (SampleClass &other)
А вообще, в функции и методы структуры указателями не передаются. Для передачи параметров на подобные объекты существуют ссылки.
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)
Делать_что-нибудь;
}
{
//... Поля структуры
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)
Делать_что-нибудь;
}
bool operator ==(const SampleClass &sc1, const SampleClass &sc2) {
// ...
}
или если внутри класса то так:
bool operator ==(const SampleClass &other) const {
//...
}