Sobrecarregando a função==
-
27-10-2019 - |
Pergunta
Atualmente, estou trabalhando na criação de uma função sobrecarregada para o operador==.Estou criando um arquivo hpp para minha lista vinculada e não consigo fazer esse operador trabalhar no arquivo hpp.
Atualmente tenho este:
template <typename T_>
class sq_list
{
bool operator == ( sq_list & lhs, sq_list & rhs)
{
return *lhs == *rhs;
};
reference operator * () {
return _c;
};
};
}
Recebo cerca de 10 erros, mas eles praticamente se repetem como erros:
C2804: 'operador==' binário tem muitos parâmetros
C2333: 'sq_list :: operator==': erro na declaração da função;pulando o corpo da função
C2143: erro de sintaxe: ausente ';'antes de '*'
C4430: especificador de tipo ausente - int assumido.Nota: C ++ não suporta default-int
Eu tentei mudar as coisas, mas sempre recebo os mesmos erros acima
Quaisquer dicas ou ajuda sobre isso são muito apreciadas.
Solução
O operador de membro tem apenas um argumento, que é o outro objeto.O primeiro objeto é a própria instância:
template <typename T_>
class sq_list
{
bool operator == (sq_list & rhs) const // don't forget "const"!!
{
return *this == *rhs; // doesn't actually work!
}
};
Na verdade, essa definição não faz sentido, já que ela apenas chama a si mesma recursivamente.Em vez disso, deve chamar alguma operação de membro, como return this->impl == rhs.impl;
.
Outras dicas
Você está declarando a sobrecarga== como parte da definição da classe, como as instâncias do método obterão.Assim, o primeiro parâmetro que você solicita, lhs
, já está implícito: lembre-se, dentro dos métodos de uma instância, você tem acesso a this
.
class myClass {
bool operator== (myClass& other) {
// Returns whether this equals other
}
}
O método operator== () como parte de uma classe deve ser entendido como "este objeto sabe como se comparar a outros".
Você pode sobrecarregar o operador== () fora da classe para receber dois argumentos, ambos os objetos sendo comparados, se isso fizer mais sentido para você.Veja aqui: http://www.learncpp.com/cpp-tutorial/94-sobrecarregando-os-operadores-de-comparação /
http://courses.cms.caltech.edu / cs11 / material / cpp / donnie / cpp-ops.html
Os operadores de comparação são muito simples.Defina== primeiro, usando uma assinatura de função como esta:
bool MyClass::operator==(const MyClass &other) const {
... // Compare the values, and return a bool result.
}
COMO comparar objetos MyClass é inteiramente seu.