C2 u8

Page 1

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

1


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, abstractas y métodos virtuales.

clases 2


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


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

pueden 4


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


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

6


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

7


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


Sobrecarga de operadores

class Vector { public: float x, y; Vector operator+ (Vector v) { Vector resultado; resultado.x = x + v.x; resultado.y = y + v.y; return resultado; } };

9


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


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 tipo_dato> • class clase { …… };

11


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


Plantillas 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

13


Plantillas • 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(); }

14


Manejo congruente de parámetros con objetos diná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.

15


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

16


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

17


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


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


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.

20


多Preguntas, dudas y comentarios?

21


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.