Herramientas de polimorfismo y herencia en C++

1 Herramientas de polimorfismo y herencia en C++M.C. Juan...
Author: Humberto Monterroso
0 downloads 2 Views

1 Herramientas de polimorfismo y herencia en C++M.C. Juan Carlos Olivares Rojas

2 Agenda 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.

3 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.

4 Sobrecarga de operadoresLos operadores que se pueden sobrecargar son: +, -, *, /, %, ^, &, |, _, ', =, <, >, <=, >=, ++, --, <<, >>, ==, %%, ||, +=, -=, *=, /=, %=, &=, |=, <<=, >>=, [ ], ( ), ->, ->*, new, delete Los operadores que no se pueden sobrecargar son: ., ::, ?:, sizeof

5 Sobrecarga de OperadoresExisten 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.

6 Sobrecarga de funcionesUn 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; }

7 Sobrecarga de funcionesdouble 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);

8 Sobrecarga de operadoresLa ú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]; }

9 Sobrecarga 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; } };

10 Sobrecarga de operadores en JavaJava 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.

11 Uso de plantillas (templates) en 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 clase { …… };

12 Plantillas int max(int x, int y) { return (x < y) ? y : x; } float max(float x, float y) {

13 Plantillas template 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

14 Plantillas Los objetos parametrizados se crean con: una_clase x; Java permite genericidad pero es mucho más básica que en C++. public interface Iterator { E next(); boolean hasNext(); }

15 Manejo congruente de parámetros con objetos dinámicos y atributos dinámicosSe 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.

16 Herencia en C++: Definición, clases abstractas y métodos virtualesLa 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.

17 Herencia //Clase Padre class punto { protected: int x, y public: int getX(); int getY(); };

18 Herencia //Clase hija class linea:punto { private: int x1, y1; public: void dibujar(); };

19 Clases 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.

20 Mé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.

21 ¿Preguntas, dudas y comentarios?