1 herramientas de polimorfismo y herencia en c++ m.c. juan carlos olivares rojas

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

Upload: humberto-monterroso

Post on 23-Jan-2016

230 views

Category:

Documents


0 download

TRANSCRIPT

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

11

Herramientas de Herramientas de polimorfismo y polimorfismo y

herencia en C++herencia en C++

M.C. Juan Carlos Olivares Rojas

Page 2: 1 Herramientas de polimorfismo y 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

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

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

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

Sobrecarga de operadoresSobrecarga de operadores

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

• Los operadores que no se pueden sobrecargar son: ., ::, ?:, sizeof

44

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PlantillasPlantillas

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

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

1212

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

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

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

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

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

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

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

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

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

HerenciaHerencia

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

1717

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

HerenciaHerencia

//Clase hijaclass linea:punto { private: int x1, y1; public: void dibujar();};

1818

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

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

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

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

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

2121

¿Preguntas, dudas y ¿Preguntas, dudas y comentarios?comentarios?