• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

nao percebo :(

3 mensagens neste tópico

nao percebo a variavel temp, mas porque e que se faz isto?? :eek:

#include <iostream>
using namespace std;
class loc {
int longitude, latitude;
public:
loc() {}
loc(int lg, int lt) {
longitude = lg;
latitude = lt;
}
void show() {
cout << longitude << " ";
cout << latitude << "\n";
}
loc operator+(loc op2);
};
// Overload + for loc.
loc loc::operator+(loc op2)
{
loc temp;
temp.longitude = op2.longitude + longitude;???????????????????????????????? nao percebo
temp.latitude = op2.latitude + latitude;// porque assim?
return temp;
}
int main()
{
loc ob1(10, 20), ob2( 5, 30);
ob1.show(); // displays 10 20
ob2.show(); // displays 5 30
ob1 = ob1 + ob2;
ob1.show(); // displays 15 50
return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O operator+ retorna uma nova instância de loc com a longitude e a latitude da instância sobre a qual é chamado somadas com a longitude e latitude da instância que é passada como argumento. latitude e longitude nas linhas que indicaste referem-se aos campos da instância da classe loc sobre a qual é chamado o operator+.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

loc temp;
temp.longitude = op2.longitude + longitude;???????????????????????????????? nao percebo
temp.latitude = op2.latitude + latitude;// porque assim?
return temp;
}

Faz-se assim porque: o operador + é uma função mebro do "loc" assim quando é chamado basta receber o objecto a somar. Depois como tem de retornar o valor da soma é criado o objecto "temp" que é carregado com esse valor e depois retornado. É assim que o operador + deve funcionar, tipo quando somas dois inteiros, o valor de retorno tambem é um inteiro.

O objecto para o qual o operadoré chamado (o da esquerda do sinal +) não é alterado os valores dos seus campos são apenas usados para carregar o objecto resultado.

Se fosse por exemplo o operador += já serria diferente pois ai os campos do próprio objecto é que eram modigicados e o retorno devia ser "*this".

Cumps!

PS: Eu estava a escrever isto enquanto o TheDark respondeu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora