Sobrecargade OperadoresRafaelde Andrade CastroHenriqueAugusto Diniz RibeiroO que e umoperador?Um operador ea parte de um codigo fonte que modifica um conteudo deuma variavel, ou declara o seu valor inicial. Ex.Multiplicacao (*), Divisao(/), Adicao(+),Atribuicao(=). Os operadores sao nativos dalinguagem, ou seja, cada linguagem possui seus operadores definidos.Os operadores possuem o conceito de serem unario ou binario,ou seja, podem utilizar dois operandos ou apenas um.Os operadores em umalinguagem de programacao sao apenas simbolosque por tras existem funcoes que determinam oque aquele simbolo faz com o valor, as funcoesde operadores sao pre-definidas apenas para os tiposprimitivos de variaveis, no qual essas funcoesnao tem como serem alteradas, pelo fato de que elas jasao nativas da linguagem, isso faz com que mesmo utilizando asobrecarga destes operadores nao tem como fugir de suafuncionalidade natural.A sobrecarga deoperadores e feito a partir de objetos de uma classe, que saodados abstratos, sendo assim para sobrecarregar operadores eobrigatorio que a linguagem tenha recursos de orientacaoa objeto.Observacoes: Nao se pode criar novosoperadores, apenas sobrecarregar operadores ja existentes.Nao se pode alterar apropriedade do operador, ou seja, se ele e binario suasobrecarga devera permanecer binaria, se ele forunario sua sobrecarga devera permanecer unaria.Operadores que podem ser sobrecarregados:Operadores que naopodem ser sobrecarregados:Exemplode sobrecarga de operadores unarios:classponto{private:intx,y;public:ponto(intx1=0, int y1=0){x=x1;y=y1;}//constructorPontooperator++() //funcao operadores pre fixada{x++;y++;returnponto(x,y)}voidprintpt()const //imprime ponto{cout<<(<<x<<,<<y<<);}};voidmain(){pontop1,p2(2,3),p3; //declara e inicializacout<<\np1= ; p1.printpt();//imprime}Observe.:p1++; e equivalente a p1.operator++();Exemplode sobrecarga de operadores binarios:classvenda{vendaoperador+(venda v) const; //funcao operadora}vendavenda :: operator + (venda v) const //soma dois objetos{intpec = npecas + v.pecas;floatpre = preco + v.pecas;returnvenda(pec,pre);}voidmain(){VendaA(58,12734.53), B(30,6000.30),T;T=A+B;}Somandoobjetos da classe ponto: funcoes operadorasClassponto{pontooperador + (ponto p) const //soma dois objetos{returnponto(x+p.x,y+p.y);}pontooperador + (int n) const //soma um numero a um objeto{returnponto(x+n,y+n);}­}voidmain(){p3=p1+p2;p4=p1+5;}Observe.:p4=p1+5;Eequivalente a p4=p1.operator+(5); por isso nao podemosescrever instrucoes p4=5+p1; que seriam interpretadascomo: p4=5.operator+(p1)//erradoExpressoesLogicasQuandouma expressao logica e calculada dentro doprograma, e feita a seguinte associacao numericacom o valor da expressao:verdadeiro 1falso 0Maisgenericamente o valor zero esta associado ao valor logicofalso, enquanto que qualquer valor diferente de zero estaassociado ao valor logico verdadeiro.Assim,uma comparacao como por exemplo a > b, quandocalculada, tem associado a si o valor 1 se a > b (verdadeira) e 0se a <= b (falsa).Damesma forma uma expressao aritmetica como por exemplo a+ b, pode ser considerada falsa ou verdadeira, conforme seu valorseja zero ou diferente de zero.Oprograma abaixo mostra algumas variacoes e exemplos dautilizacao de expressoes aritmeticas comologicas e vice-versa. Verifique o que sera impressoabaixo:#include<stdio.h>intmain(){chara;intb;intx = 0, y = 1;//os valores atribuidos a a e b saozero e um, dependendo se a//expressao e verdadeira ou falsaa= x < y;cout<<"\n(1) valor de a = "<<a;a= x < y && y > 0;cout<<"\n(2) valor de a = "<<a;a= x > y;cout<<"\n(3) valor de a = <<a;b= x+y < x*y x == y;cout<<"\n(4) valor de a = "<<b;//comparacoesif(1) cout<<\n (5) sempre verdadeiro";if(-5) cout<<\n (6) sempre verdadeiro";if(0) ;elsecout<<"\n (7) sempre falso";if(1 == 1) cout<<"\n (8) sempre verdadeiro";if(0 == 0) cout<<"\n (9) sempre verdadeiro";//a tambem pode receber valores aritmeticos entre 0 e 255a= x * y;if(a) cout<<\n (10) verdadeiro quando a diferente de zero- a = <<a;elsecout<<"\n (10) falso quando a igual a zero - a = <<a;//a e b como valores logicosa= x * y;b= x + y;if(a