Sovraccaricare la funzione ==
-
27-10-2019 - |
Domanda
Attualmente sto lavorando alla creazione di una funzione sovraccarica per l'operatore ==. Sto creando un file HPP per il mio elenco collegato e non riesco a far funzionare questo operatore nel file HPP.
Attualmente ho questo:
template <typename T_>
class sq_list
{
bool operator == ( sq_list & lhs, sq_list & rhs)
{
return *lhs == *rhs;
};
reference operator * () {
return _c;
};
};
}
Ricevo circa 10 errori ma si ripetono praticamente come errori:
C2804: Binary 'Operator ==' ha troppi parametri
C2333: 'sq_list :: operator ==': errore nella funzione della funzione; saltare il corpo della funzione
C2143: Errore di sintassi: mancante ';' prima '*'
C4430: Specificatore di tipo mancante - INT assunto. NOTA: C ++ non supporta Default-Int
Ho provato a cambiare le cose ma ho costantemente gli stessi errori di sopra
Qualsiasi consiglio o assistenza su questo è molto apprezzato.
Soluzione
L'operatore membro ha solo uno argomento, che è l'altro oggetto. Il primo oggetto è l'istanza stessa:
template <typename T_>
class sq_list
{
bool operator == (sq_list & rhs) const // don't forget "const"!!
{
return *this == *rhs; // doesn't actually work!
}
};
Questa definizione in realtà non ha senso, dal momento che si chiama semplicemente ricorsivamente. Invece, dovrebbe chiamare alcune operazioni di membro, come return this->impl == rhs.impl;
.
Altri suggerimenti
Stai dichiarando il sovraccarico == come parte della definizione della classe, man mano che le istanze del metodo otterranno. Pertanto, il primo parametro richiesto, lhs
, è già implicito: ricorda, all'interno di un'istanza a cui hai accesso this
.
class myClass {
bool operator== (myClass& other) {
// Returns whether this equals other
}
}
Il metodo operatore == () come parte di una classe dovrebbe essere inteso come "questo oggetto sa come confrontarsi con gli altri".
È possibile sovraccaricare l'operatore == () al di fuori della classe per ricevere due argomenti, entrambi gli oggetti vengono confrontati, se questo ha più senso per te. Vedere qui:http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/
http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html
Gli operatori di confronto sono molto semplici. Define == First, usando una firma della funzione come questa:
bool MyClass::operator==(const MyClass &other) const {
... // Compare the values, and return a bool result.
}
Come confrontare gli oggetti myclass è tutto tuo.