segunda-feira, 9 de janeiro de 2012

[Programação em C++] Sobrecarga de operadores

Olá pessoal, nesse post irei falar um pouco sobre sobrecarga de operadores. A sobrecarga de operador nada mais é do que a atribuição de vários significados a um operador.

O C++ permite definir novas funções para operadores padrão. Isso é chamado de sobrecarga de operador, ou seja, a definição de novas tarefas para o mesmo operador. 

Sabemos que o operador da soma (+) pode adicionar valores do tipo int, float ou double. Entretanto, o + não adiciona números de um tipo de dado definido pelo usuário. Quando se usa o mesmo operador para diferentes tipos de dados, então diz-se que esse operador está sobrecarregado.

O código abaixo implementa a soma de números complexos. Um número complexo é um número do tipo z = x + yi (a variável "x" é chamada de parte real e a "y" de parte imaginária).


Linha 5: inclusão das bibliotecas padrão.

Linha 12: função para mostrar o número complexo.

Linha 17: construtor da classe Complex, esse construtor tem como parâmetro a variável "r" que representa a parte real do número e a variável "i" que representa a parte imaginária.

Linhas 22 e 23: declaração para sobrecarregar os operadores = e +.

Linha 26 à 28: retorna a instância de um novo objeto da classe.

Linha 30 à 32: define como fazer a soma. Aqui é importante um detalhamento maior. A operação está ocorrendo dentro de um dos objetos, aquele imediatamente antes do operador. O operador "pertence" a um dos objetos que está sendo operado que é sempre aquele que o antecede. Por isso só foi declarado o segundo dado a operar. Quando eu faço real + c.real, "real" é a parte real do objeto "a" e "c.real" é a parte real do objeto "b". A mesma coisa acontece com "imag".

Linha 35 e 36: declaro os objetos "a" e "b" do tipo Complex e passo a parte real e imaginária de cada um para o construtor.

Linha 37: declaro a variável "c" do tipo Complex que irá receber a soma de "a" e "b" declarados anteriormente.

Linha 38: chamo a função para mostrar o número complexo "c".

O número complexo "a" tem como parte real 1.0 e parte imaginária 2.0. O número complexo "b" tem como parte real 3.0 e parte imaginária 4.0. Os números ficam nessa forma:

a = 1 + 2i
b = 3 + 4i
c = a + b
c = (1 + 2i) + (3 + 4i)

Parte real soma com parte real e parte imaginária soma com parte imaginária, fica assim: 

c = 4 + 6i 
(essa é a saída do programa)

Espero que tenham entendido, até a próxima!


3 comentários:

Francisco Neto disse...

Na linha 26 a 28 você não pega os valores, você apenas retorna uma instancia de um novo objeto da classe. Logo, se você fizer assim: A = B;

sendo que ambos são da classe complex a não receberia o valor de B, ele apenas retornaria uma nova instancia com o valor de B, não haveria atribuição.

admin disse...

Ok amigo, foi feita a correção, obrigado.

Anônimo disse...

Joaquim

eu tenho visto sempre exemplos para retorno da propria class... mas para string, char* ou outros nao tenho visto... por favor pode nos fornecer essa informaçao? :(