C++ Operatori di confronto


Esempio

Puoi sovraccaricare tutti gli operatori di confronto:

  • == e !=
  • > e <
  • >= e <=

Il modo consigliato per sovraccaricare tutti questi operatori è implementando solo 2 operatori ( == e < ) e quindi li usa per definire il resto. Scorri verso il basso per la spiegazione

Sovraccarico al di fuori della class / struct :

//Only implement those 2
bool operator==(const T& lhs, const T& rhs) { /* Compare */ }
bool operator<(const T& lhs, const T& rhs) { /* Compare */ }

//Now you can define the rest
bool operator!=(const T& lhs, const T& rhs) { return !(lhs == rhs); }
bool operator>(const T& lhs, const T& rhs) { return rhs < lhs; }
bool operator<=(const T& lhs, const T& rhs) { return !(lhs > rhs); }
bool operator>=(const T& lhs, const T& rhs) { return !(lhs < rhs); }

Sovraccarico all'interno di class / struct :

//Note that the functions are const, because if they are not const, you wouldn't be able
//to call them if the object is const

//Only implement those 2
bool operator==(const T& rhs) const { /* Compare */ }
bool operator<(const T& rhs) const { /* Compare */ }

//Now you can define the rest
bool operator!=(const T& rhs) const { return !(*this == rhs); }
bool operator>(const T& rhs) const { return rhs < *this; }
bool operator<=(const T& rhs) const { return !(*this > rhs); }
bool operator>=(const T& rhs) const { return !(*this < rhs); }

Ovviamente gli operatori restituiscono un bool , che indica true o false per l'operazione corrispondente.

Tutti gli operatori prendono i loro argomenti da const& , perché l'unica cosa che fanno gli operatori è il confronto, quindi non dovrebbero modificare gli oggetti. Passing By & (di riferimento) è più veloce di per valore, e per assicurarsi che gli operatori non modificano, si tratta di un const -Referenza.

Si noti che gli operatori all'interno della class / struct sono definiti come const , la ragione di ciò è che senza le funzioni const , il confronto degli oggetti const non sarebbe possibile, in quanto il compilatore non sa che gli operatori non modificano nulla.