Sie sind auf Seite 1von 13

MATERIA: PROGRAMACION C++ ALUMNO: ALCOCER REYES JOSE JAHIR PROFESOR: SERGIO RUIZ SANCHEZ CARRERA: LIC. EN ING.

EN SISTEMAS DE INFORMACION

CHETUMAL, Q.ROO A JULIO DEL 2011

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

HERENCIA MLTIPLE
Es cuando una clase deriva de mas de una clase base.
class <clase_derivada> : [public|private] <base1> [,[public|private] <base2>] {};

Clase base, clase padre, clase madre, superclase: La clase base es la clase ya creada, de la que se hereda. Clase derivada, clase hija, clase heredada: es la clase que se crea a partir de la clase base.

La herencia mltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrs suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, tambin podrs suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la programacin sera herencia mltiple (clase empleado_tienda): Por tanto, es posible utilizar ms de una clase para que otra herede sus caractersticas.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

class Persona { ... Hablar(); Caminar(); ... }; class Empleado { Persona jefe; int sueldo; Cobrar(); ... }; class empleado_tienda: public Persona, Empleado { ... AlmacenarStock(); ComprobarExistencias(); ... };

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

FUNCION VIRTUAL

Para decirle al compilador que haga la vinculacin en tiempo de ejecucin basndose en el tipo o la clase del objeto utilizamos:

virtual

Slo hay que predecer la declaracin de la funcin con la palabra reservada virtual. Slo la declaracin, no la definicin o implementacin. Slo es necesario declarar la funcin virtual en la clase base. No es necesario hacerlo en las derivadas. Todas las funciones de las clases derivadas que encajen con la declaracin sern llamadas utilizando el mecanismo virtual.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

Los mtodos virtuales heredados son tambin virtuales en la clase derivada, por lo que si alguna clase hereda de la clase derivada el comportamiento ser similar al indicado. Los nicos mtodos que no pueden ser declarados como virtuales son: y y y Los constructores Los mtodos estticos Los operadores new y delete.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

POLIMORISMO
Es otra forma de separar interfaz de implementacin.La encapsulacin nos permite crear nuevos tipos de datos combinando caractersticas (atributos) y comportamientos (mtodos). Control de acceso: Separamos interfaz de implementacin haciendo privados los detalles. La herencia nos permite tratar a un objeto como de su propia clase o como su clase base. C++ nos permite acceder a objetos de una clase derivada usando punteros a la clase base. Slo podemos acceder a atributos y mtodos que existan en la clase base: Una variable pasada o esperada puede adoptar mltiples formas. Cuando se habla de polimorfismo en C++ se entienden dos cosas: 1.- Se puede trabajar con un objeto de una clase sin importar de qu clase se trata. Se trabajar igual sea cual sea la clase a la que pertenece el objeto. Esto se consigue mediante jerarquas de clases y clases abstractas. 2.-Posibilidad de declarar mtodos con el mismo nombre que pueden tener diferentes argumentos dentro de una misma clase.

La capacidad de un programa de trabajar con ms de un tipo de objeto se conoce con el nombre de polimorfismo.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

POLIMORFISMO
VENTAJAS
Evitar la duplicacin de cdigo para tipos que se comportan del mismo modo y que, en general, son colecciones de objetos de otros tipos: Lista de enteros, reales. Mayor facilidad de modificacin de cdigo -

DESVENTAJAS
La modificacin de un tipo genrico implica la recompilacin de todos los programas que se utiliza.

PLATILLAS
Las plantillas (templates) nos permiten parametrizar estas clases para adaptarlas a cualquier tipo de dato. El uso de plantillas es apropiado para definir estructuras que sirven para almacenar una coleccin de objetos (una lista, un vector, un grafo)

PLASTILLAS
VENTAJAS
El inters de las plantillas residen en: -la generalizacin: desde el momento en que el tipo incluye todo lo que es utilizado en la funcin o clase-plantilla, es posible pasar cualquier tipo como parmetro. -simplicidad: nicamente se codifica una funcin o clase sin importar el tipo pasado como parmetro, lo que hace que el mantenimiento del cdigo sea ms fcil.

DESVENTAJAS
El uso de plantillas requiere tomar algunas precauciones (typename) -El programa demora ms en ser compilado.

Para trabajar con plantillas, necesitamos 4 cosas:

-La palabra clave typename: indica que el tipo que sigue es abstracto (parmetro de plantilla o depende de un parmetro de plantilla) y debe ser tomado en cuenta nicamente cuando se le instancia.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

-La palabra clave template: indica que la clase o funcin que le sigue toma parmetros de plantilla. Despus de la palabra clave template se escriben directamente los parmetros de plantilla (precedidos de la palabra clave typename, struct, class, o tipo de base segn el tipo de parmetro de plantilla esperado) entre << >>, seguidos de la clase o funcin.

En el ejemplo que sigue veremos: -cmo codificar una clase-plantilla -cmo codificar una funcin-plantilla -cmo codificar un operador-plantilla En este ejemplo las clases o funciones-plantilla toman solo un parmetro de plantilla, pero el procedimiento ser el mismo con varios parmetros de plantilla.

Ejemplo: template <typename T1, typename T2, ... > type_devuelve_t mi_funcion(param1_t p1,param2_t p2, ...){ ... } template <typename T1, typename T2, ... > class mi_clase_t{ ... }; template <typename T1, typename T2, ... > struct mi_struct_t{ ... }; -El operador :: : permite acceder a los campos (en particular los tipos) y mtodos estticos de una clase o de una estructura. No es especifico a las plantillas (se aplica a las clases y estructuras en general y a los namespaces). Es un poco como el / de los directorios. As, std::vector<int>::const_iterator significa que

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

accedo al tipo const_iterator, almacenado en la clase vector<int>, ella misma codificada en el namespace std. Vamos a definir nuestra propia clase de vector a fin de ilustrar lo que acabamos de decir. Evidentemente en la practica utilizaremos directamente la clase std::vector de la STL...

PLANTILLAS DE FUNCIONES
Supngase que se quiere crear una funcin que devolviese el mnimo entre dos valores independientemente de su tipo (se supone que ambos tienen el mismo tipo). Se podra pensar en definir la funcin tantas veces como tipos de datos se puedan presentar (int,long,float,double,etc.). Aunque esto es posible, ste es un caso ideal para aplicar plantillas de funciones. Esto se puede hacer de la siguiente manera:

// Decl araci n de l a pl antil l a de funci n template <class T> T minimo( T a, T b);

En ese caso con<classT>se est indicando que se trata de una plantilla cuyo parmetro va a ser el tipo T y que tanto el valor de retorno como cada uno de los dos argumentos va a ser de este tipo de dato T. En la definicin y declaracin de la plantilla puede ser que se necesite utilizar mas de un tipo de dato e incluido algn otro parmetro constante que pueda ser utilizado en las declaraciones. Por ejemplo, si hubiera que pasar dos tipos a la plantilla, se podra escribir:

// Declaracin de la plantilla de funcin con dos tipos de datos template <class T1, class T2> void combinar(T1 a, T2 b);

Podra darse el caso tambin de que alguno de los argumentos o el valor de retorno fuese de un tipo de dato constante y conocido. En ese caso se indicara

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

explcitamente como en una funcin convencional. La definicin de la plantilla de funcin es como sigue:

// Defi ni ci n de l a pl anti ll a de funcint e m p l a t e < c l a s s T > T m i n i m o ( T a , T b ) {i f ( a < = b ) r e t u r n a ; elser e t u r n b ; }


///////////////////////////////////////////////// // Una funcin-plantilla template <typename T> void escribir(const my_vector_t<T> & v){ unsigned n = v.size(); std::cout << "[ "; for(unsigned i=0;i<n;<gras>i) std::cout << v[i] << ' '; std::cout << ']'; } int main(){ my_vector_t<int> v(5); // un vector de 5 enteros v[0] = 6; v[1] = 2; v[2] = 3; v[3] = 4; v[4] = 8; escribir<int>(v); // llamado a la funcin template std::cout << std::endl; escribir(v); // llamado implcito de escribir<int> std::cout << std::endl; std::cout << v << std::endl; // llamado al operador template return 0; }

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

PLANTILLAS DE FUNCIONES
De una manera semejante a como se hace para las funciones se puede generalizar para el caso de las clases por medio de plantillas de clases. Se definir un parmetro que indicar el tipo de datos con los que ms adelante se crearn los objetos. Se presenta a continuacin un ejemplo completo de utilizacin de plantillas de clases basado en una pila muy simple (sin listas vinculadas y sin reserva dinmica de memoria):

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

DIFERENCIA DE PLANTILLAS Y POLIMORFISMO


Puede pensarse que las plantillas y el polimorfismo son dos utilidades que se excluyen mutuamente. Aunque es verdad que el parecido entre ambas es grande, hay tambin algunas diferencias que pueden hacer necesarias ambas

caractersticas. El polimorfismo necesita punteros y su generalidad se limita a jerarquas. Recurdese que el polimorfismo se basa en que en el momento de compilacin se desconoce a qu clase de la jerarqua va a apuntar un puntero que se ha definido como puntero a la clase base. Desde este punto de vista las plantillas pueden considerar se como una ampliacin del polimorfismo.

.Una desventaja de las plantillas es que tienden a crear un cdigo ejecutable grande porque se crean tantas versiones de las funciones como son necesarias.

___________________________Alcocer Reyes Jose Jahir Lic. En Ing. En Sistemas de Informacin

BIBLIOGRAFIA
 Garca de Jaln, J. y otros autores, Aprenda ANSI C como si estuviera en Primero, ESIISS,1995.  Graham, N., LEARNING C++, McGraw Hill, 1992.  Schildt, H., C++: Gua de Autoenseanza, McGraw-Hill, 2 edicin, 1995.  Marshall P.C. and Lomow C., C++ FAQS, Addison-Wesley Publishing Company, 1994.  Stroustrup, B., The C++ Programming Language, Addison-Wesley, 3 edicin, 1997.  Ellis, M.A. y Stroustrup, B., Manual de Referencia C++ con Anotaciones, Addison-Wesley/Daz de Santos, Madrid, 1994.  Ceballos, F.J., Programacin Orientada a Objetos con C++, 2 edicin, RAMA, 1997.