Escolar Documentos
Profissional Documentos
Cultura Documentos
Redefinio de Operadores
Quase todos os operadores podem ser redefinidos:
aritmticos: + - (unrio ou binrio) * / % bit-a-bit: ^ & | ~ << >> lgicos: ! && || de comparao: == != > < <= >= de incremento e decremento: ++ -- (psfixos ou prfixos) de atribuio: = += -= *= /= %= |= &= ^= ~= <<= >>= de alocao e libertao de memria: new new[] delete delete[] de sequenciao: , de acesso a elemento de array: [] de acesso a membro de objecto apontado: -> ->* de chamada de funo: ()
.*
2
Os operadores unrios posfixos (++ --) so definidos com um argumento adicional do tipo int que nunca usado (serve apenas para distinguir do caso prefixo):
Para qualquer operador unrio posfixo @, x@ pode ser interpretado como: 1) x.operator@(int), ou 2) operator@(x,int)
AED - 2008/09
Os operadores = [] () e -> s podem ser definidos da 1 forma (por membros-funo no estticos), para garantir que do lado esquerdo est um lvalue
AED - 2008/09
AED - 2008/09
e copia */
*/
AED - 2008/09
};
// Calcula valor de polinmio num ponto x
double Polinomio::operator() (double x) const { double res = coefs[grau]; for (int i = grau-1; i >= 0; i--) res = res * x + coefs[i]; return res; } void teste() { Polinomio pol; cout << "pol? "; cin >> pol; double x; cout << "x? "; cin >> x; cout << "pol(x)=" << pol(x) << '\n'; }
AED - 2008/09
// operadores aritmticos binrios Complex operator+ (const Complex & Complex operator- (const Complex & Complex operator* (const Complex & Complex operator/ (const Complex &
c) c) c) c)
// operadores relacionais bool operator== (const Complex & c) const; bool operator!= (const Complex & c) const;
AED - 2008/09
10
// operadores unrios Complex operator-() const; // membro-funo double size() const { return sqrt(re*re + im*im); } // I/O friend friend };
AED - 2008/09
ostream & operator<< (ostream & o, const Complex & c); istream & operator>> (istream & i, const Complex & c);
11
bool Complex::operator== (const Complex & c) const { return ( re==c.re && im==c.im ); } bool Complex::operator!= (const Complex & c) const { return ( re!=c.re || im!=c.im ); }
AED - 2008/09
12
13
Ns complexos: entrada/sada
istream & operator>> (istream & i, const Complex & c) { return i >> c.re >> c.im; } ostream & operator<< (ostream & o, const Complex & c) { o << c.re; if (c.im > 0) o << + << c.im << j; else o << c.im << j; return o; }
AED - 2008/09
14
Ns complexos: teste
int main() { Complex c1; Complex soma=0; cout << Escreva um n complexo; while (cin >> c1) { soma += c1; cout << Escreva outro n complexo; } cout << Soma << soma; return 0; }
AED - 2008/09
15