Como sobrecarregar o operador ++ de duas maneiras diferentes para postfix a++
e prefix ++a
?
c++
operator-overloading
novato
fonte
fonte
Respostas:
Deve ser assim:
fonte
Number operator++ (int)
considera umint
como parâmetro, embora você não o use?++x
é prefixo e, portanto, chamaoperator++()
whilex++
é pós-fixo e, portanto, chamaoperator++(int)
A diferença está na assinatura que você escolhe para sua (s) sobrecarga (s)
operator ++
.Citado do artigo relevante sobre este assunto no C ++ FAQ (vá lá para mais detalhes):
PS: Quando descobri sobre isso, tudo que vi inicialmente foi o parâmetro fictício, mas os diferentes tipos de retorno são na verdade mais interessantes; eles podem explicar por que
++x
é considerado mais eficiente do quex++
em geral .fonte
Você tem duas maneiras de sobrecarregar os dois (prefixo / postfix) operadores ++ para um tipo T:
Método de objeto:
Esta é a maneira mais fácil, usando o idioma OOP "comum".
Função de não membro do objeto:
Esta é outra maneira de fazer isso: Contanto que as funções estejam no mesmo namespace que o objeto ao qual estão se referindo, elas serão consideradas quando o compilador procurar uma função para manipular
++t ;
out++ ;
codificar:É importante lembrar que, do ponto de vista C ++ (incluindo um ponto de vista do compilador C ++), essas funções não-membros ainda fazem parte da interface de T (desde que estejam no mesmo namespace).
Existem duas vantagens potenciais da notação de função de não membro:
fonte
Declare assim:
Implemente corretamente - não mexa com o que todos sabem que eles fazem (incremente e depois use, use e depois incremente).
fonte
Sei que é tarde, mas tive o mesmo problema e encontrei uma solução mais simples. Não me interpretem mal, esta é a mesma solução que a principal (postada por Martin York). É um pouco mais simples. Só um pouco. Aqui está:
A solução acima é um pouco mais simples porque não usa um objeto temporário no método postfix.
fonte