1 herramientas de polimorfismo y herencia en c++ m.c. juan carlos olivares rojas
TRANSCRIPT
11
Herramientas de Herramientas de polimorfismo y polimorfismo y
herencia en C++herencia en C++
M.C. Juan Carlos Olivares Rojas
AgendaAgenda
• Sobrecarga de operadores en C++.• Uso de plantillas (templates) en C++.
• Manejo congruente de parámetros con objetos dinámicos y atributos dinámicos.
• Herencia en C++: Definición, clases abstractas y métodos virtuales.
22
Sobrecarga de operadores en C+Sobrecarga de operadores en C+++
• La sobrecarga de operadores es una forma más de polimorfismo.
• La sobrecarga de operadores permite definir para una clase un método especial, por ejemplo la clase string sobre carga el operador + para concatenar cadenas.
33
Sobrecarga de operadoresSobrecarga de operadores
• Los operadores que se pueden sobrecargar son: +, -, *, /, %, ^, &, |, _, ', =, <, >, <=, >=, ++, --, <<, >>, ==, %%, ||, +=, -=, *=, /=, %=, &=, |=, <<=, >>=, [ ], ( ), ->, ->*, new, delete
• Los operadores que no se pueden sobrecargar son: ., ::, ?:, sizeof
44
Sobrecarga de OperadoresSobrecarga de Operadores
• Existen algunos operadores como el = que ya se encuentran sobrecargados de manera nativa. En el caso del = compara objetos en base a sus referencias.
• Antes de ver la sobrecarga de operadores se verá la sobrecarga de funciones para entender el concepto. 55
Sobrecarga de funcionesSobrecarga de funciones
• Un método o función se dice que está sobrecargado cuando para el mismo identificador se pueden realizar dos o más funciones. Por ejemplo:
int suma(int a, int b) { return a+b;} 66
Sobrecarga de funcionesSobrecarga de funciones
double suma(double a, double b) { return a+b;}
• Se puede invocar la función suma de dos formas distintas:
• int c = suma(10, 3);• double d = suma(10.3, 5.1); 77
Sobrecarga de operadoresSobrecarga de operadores
• La única restricción de la sobrecarga de operadores es que no se puede cambiar la aridad de los operadores; es decir, si el + es binario, se sigue manejando de la misma forma.
• Complex& Complex::operator[](unsigned int i) { return data[i]; }
88
Sobrecarga de operadoresSobrecarga de operadoresclass Vector { public: float x, y; Vector operator+ (Vector v) { Vector resultado;
resultado.x = x + v.x; resultado.y = y + v.y; return resultado; }};
99
Sobrecarga de operadores en Sobrecarga de operadores en JavaJava
• Java no soporta sobrecarga de operadores. Los únicos casos de operadores sobrecargados con una operación especial (definido por el sistema no por los programadores) son el operador = para copia, para == igualdad de referencias y + para la concatenación de cadenas o elementos. 1010
Uso de plantillas (templates) en Uso de plantillas (templates) en C++C++
• Las plantillas nos permite hacer genéricos los tipos de datos abstractos; es decir, nos permiten definir una clase que funcione con cualquier tipo de datos, por ejemplo una lista puede ser de cualquier cosa.
• template <class tipo_dato>• class clase { …… }; 1111
PlantillasPlantillas
int max(int x, int y) { return (x < y) ? y : x; }
float max(float x, float y) { return (x < y) ? y : x; }
1212
PlantillasPlantillas
template <typename T> T max(T x, T y) { return (x < y) ? y : x; }
• Cuando se trata de funciones no hay diferencia entre los atributos typename y class 1313
PlantillasPlantillas
• Los objetos parametrizados se crean con: una_clase<int> x;
• Java permite genericidad pero es mucho más básica que en C++.
public interface Iterator<E> { E next();boolean hasNext(); } 1414
Manejo congruente de Manejo congruente de parámetros con objetos parámetros con objetos
dinámicos y atributos dinámicosdinámicos y atributos dinámicos• Se debe tener mucho cuidado al
momento de crear objetos de manera dinámica que a su vez reciba como argumentos atributos también dinámicos.
• Se debe limpiar de la memoria todos los objetos que no se necesiten.
1515
Herencia en C++: Definición, Herencia en C++: Definición, clases abstractas y métodos clases abstractas y métodos
virtualesvirtuales
• La herencia es un mecanismo que permite la reutilización de componentes. Se basa en el principio de que los objetos en la vida real heredan ciertos atributos y comportamientos de sus padres.
• La herencia en C++ puede ser múltiple.1616
HerenciaHerencia
//Clase Padreclass punto { protected: int x, y public: int getX(); int getY();};
1717
HerenciaHerencia
//Clase hijaclass linea:punto { private: int x1, y1; public: void dibujar();};
1818
Clases AbstractasClases Abstractas
• Son aquellas clases que sólo sirven para hacer generalización; es decir, sirven de clase base más no se instancian objetos de dicha clase.
• Las clases abstractas son el equivalente a las interfaces en Java.
1919
Métodos VirtualesMétodos Virtuales• Son los métodos que se definen en las
clases abstractas y que se implementan en cada clase hija.
• Los métodos virtuales se caracterizan por que se ligan en memoria; es decir, se mandan llamar desde un puntero a la clase abstracta y de manera dinámica se ejecuta el método que corresponde al objeto actual.
2020
2121
¿Preguntas, dudas y ¿Preguntas, dudas y comentarios?comentarios?