Sobrecarga de Operadores
Sobrecarga de métodos
Sobrecarga de operadores
Fundamentos
Restrições
SOBRECARGA DE MÉTODOS / FUNÇÕES
Métodos com mesmo nome mas assinaturas diferentes: Tipos, ordem ou número de parâmetros diferentes
Métodos com a mesma assinatura não podem ter tipos de retorno diferentes
Tipo_retorno metodoX( tipo1 y);
Tipo_retorno metodoX( tipo1 y, tipo2 z);
Operador vs. friends
Estudo de casos
Tipo_retorno metodoX( tipo1 y, tipo3 w);
Tipo_retorno metodoX( tipo2 y, tipo1 z);
Compilador chama o método adequado examinando a assinatura Exemplo:
JÁ USAMOS SOBRECARGA DE MÉTODOS...
Sobrecarga de construtores
Construtor sem parâmetros/ construtor com parâmetros CONSTRUTOR DE CÓPIA
Usado sempre que uma cópia de um objeto for necessária Passagem por valor ou retorno por valor
Inicializar um objeto com uma cópia de outro
ClasseX novoObj( velhoObj ); novoObj é cópia de velhoObj
Data casamento;
Data nascimento(10,5,2010);
Protótipo para classe ClasseX
ClasseX( const ClasseX & );
Deve obter referência
Do contrário seria passagem por valor
Tenta fazer cópia chamando o construtor de cópia
Loop infinito
Muito importante quando alocação dinâmica é utilizada
SOBRECARGA DE OPERADORES
Uso de operadores c/ objetos
Utilização de operadores da linguagem para manipular objetos Clareza
Operadores são sensíveis ao contexto
FUNDAMENTOS DE SOBRECARGA DE OPERADORES
Sobrecarga apresenta uma notação mais clara e objetiva: Considere a criação de um método soma: objeto3 = objeto1.soma(objeto2);
Passando o objeto 2 para o método soma do objeto1
Exemplo objeto3 = objeto1 + objeto2;
+
Operações aritméticas (integers, floats, etc.)
=
objeto1.operator+(objeto2)
Classe matriz:
Matriz A, B, C;
C = A+B;
1
FUNDAMENTOS DE SOBRECARGA DE
OPERADORES
RESTRIÇÕES
Não se pode mudar
Sobrecarga de operadores: Como fazer?
Como os operadores trabalham com os tipos pré-definidos
Soma de inteiros deve ser sempre