Sobrecarga de operadores
Taty120900Síntesis27 de Enero de 2020
2.071 Palabras (9 Páginas)229 Visitas
ESCUELA SUPERIOR[pic 1][pic 2]
POLITÉCNICA
DE CHIMBORAZO
FACULTAD DE INFORMÁTICA
Y ELECTRÓNICA
SOFTWARE
Nombre: Tatiana Carrillo
Código: 6768
Materia: Paradigma Orientado a Objetos
Tema: Sobrecarga de operadores
Curso: Segundo A
Tabla de contenido
SOBRECARGA DE OPERADORES 3
Objetivos 3
Objetivo General 3
Objetivos Específicos 3
Introducción 4
Desarrollo 5
Lista de operadores válidos en C++ 5
Sintaxis 5
Algunas limitaciones para la sobrecarga de operadores 5
Operadores unitarios 6
Operadores binarios 9
Conclusiones 12
Recomendaciones 12
Bibliografía 12
SOBRECARGA DE OPERADORES
Objetivos
Objetivo General
- Realizar una investigación bibliográfica referente a sobrecarga de operadores
Objetivos Específicos
- Establecer la definición de sobrecarga de operadores
- Realizar una búsqueda de temas particulares de mencionado tema
- Elaborar ejemplos prácticos donde se evidencie los temas de consulta
Introducción
Un operador sobrecargado es aquel al que se le ha dado más de una función, por ejemplo, el operador <<, este operador ha sido sobrecargado por el mismo lenguaje C++, así se le puede emplear como operador de desplazamiento de bits (a=b<<3;) o como operador de flujo de datos (cout << "mensaje").
La sobrecarga de operadores es uno de los mecanismos que nos permite ampliar las capacidades de los lenguajes de programación orientados a objetos. En C++, la declaración y definición de una sobrecarga de operador es muy similar a la declaración y definición de una función cualquiera. El ejemplo más sencillo de una sobrecarga de operadores nos lo da el lenguaje mismo, es decir, en una operación aritmética (por ejemplo, una suma) el compilador determina el tipo de operación requerida de acuerdo con el tipo de datos involucrados.
Desarrollo
En realidad, la mayoría de los operadores en C++ ya están sobrecargados. Por ejemplo, el operador + realiza distintas acciones cuando los operandos son enteros, o en coma flotante. En otros casos esto es más evidente, por ejemplo, el operador * se puede usar como operador de multiplicación o como operador de dirección.
C++ permite al programador sobrecargar a su vez los operadores para sus propios usos o para sus propios tipos.
Lista de operadores válidos en C++
+ | - | * | / | % | ^ | & | | |
~ | ! | , | = | < | > | <= | >= |
++ | -- | << | >> | == | != | && | || |
+= | -= | *= | /= | %= | ^= | &= | |= |
<<= | >>= | [ ] | ( ) | -> | ->* | new | delete |
Sintaxis
Tipo Nombre de la Clase :: operator
}
Algunas limitaciones para la sobrecarga de operadores
- Se pueden sobrecargar todos los operadores excepto “.”, “.*”, “::”, “?:”, sizeof y typeid.
- Los operadores "=", "[]", "->", "()", "new" y "delete", sólo pueden ser sobrecargados cuando se definen como miembros de una clase.
- Los argumentos deben ser tipos enumerados o estructurados: struct, union o class.
- El número de argumentos viene predeterminado dependiendo del operador.
- Podemos sobrecargar tanto operadores unarios como binarios:
- tipo_ret operator op_unario (tipo1 arg1);
- tipo_ret operator op_binario (tipo1 arg1, tipo2 arg2);
Operadores unitarios
También es posible sobrecargar los operadores de pre-incremento, post-incremento, pre-decremento y post-decremento.
De hecho, es posible sobrecargar otros operadores de forma unitaria, como el +, -, * o & de forma prefija.
En estos casos, el operador sólo afecta a un operando.
Ejemplo 1
En este ejemplo se evidencia el operador unario sobrecargado (++)
// Autor: Tatiana Carrillo
#include
#include
using namespace std;
class cReloj{ // Clse cReloj
int hora; // Atributo Hora
int minuto; // Atributo Minuto
int segundo; // Atributo Segundo
public:
cReloj(){ setHora(0); setMinuto(0); setSegundo(0); } // Método constructor
~cReloj(){ setHora(0); setMinuto(0); setSegundo(0); } // Método destructor
void setHora(int x) { hora = x; } // Actualiza el valor de la hora
void setMinuto(int x) { minuto = x; } // Actualiza el valor de los minutos
void setSegundo(int x) { segundo = x; } // Actualiza el valor de los segundos
int getHora() { return hora; } // Devuelve el valor de la hora
int getMinuto() { return minuto; } // Devuelve el valor de los minutos
int getSegundo() { return segundo; } // Devuelve el valor de los segundos
cReloj(int h, int m, int s){ // Método que actualiza el reloj
setHora(h);
setMinuto(m);
setSegundo(s);
} // De cReloj
void operator ++(){ // Implementación de SOBRECARGA DE OPERADORES
setSegundo(getSegundo() + 1);
if (getSegundo() > 59){ // Si los segundos superan 59, realiza el proceso correcto
setSegundo(getSegundo() - 60);
setMinuto(getMinuto() + 1);
} // Fin del if
if (getMinuto() > 59){ // Si los minutos superan 59, realiza el proceso correcto
setMinuto(getMinuto() - 60);
setHora(getHora() + 1);
} // Fin del if
if (getHora() > 23) // Si la hora supera 23, realiza el proceso correcto
setHora(getHora() - 24);
} // De sobrecarga de operadores
}; // De clase cReloj
int main (){ // Programa principal
system("Color B");
...