POLIMORFISMO

Description

Apunte
diazmtzal
Note by diazmtzal, updated more than 1 year ago
diazmtzal
Created by diazmtzal almost 8 years ago
15
0

Resource summary

Page 1

Polimorfismo. Métodos virtuales.

El polimorfismo indica que una variable pasada o esperada puede adoptar múltiples formas. Cuando se habla de polimorfismo en programación orientada a objetos se suelen entender dos cosas: 1. La primera se refiere a que se puede trabajar con un objeto de una clase sin importar de qué clase se trata. Es decir, se trabajará igual sea cual sea la clase a la que pertenece el objeto. Esto se consigue mediante jerarquías de clases y clases abstractas. 2. La segunda suele referirse a la posibilidad de declarar métodos con el mismo nombre que pueden tener diferentes argumentos dentro de una misma clase.La capacidad de un programa de trabajar con más de un tipo de objeto se conoce con el nombre de polimorfismo

Page 2

Hasta ahora la herencia se ha utilizado solamente para heredar los miembros de una clase base, pero también existe la posibilidad de que un método de una clase derivada se llame como método de la clase base pero tenga un funcionamiento diferente.

Por ejemplo, tomemos la clase disco_musica que hereda de la clase base disco:

class disco{protected:int capacidad;char * fabricante;int num_serie;public:disco (int c, char * f, int n){capacidad = c; strcpy(fabricante, f);num_serie=n;}void imprimir_capacidad(){cout << capacidad; }void imprimir_fabricante(){cout << fabricante; }void imprimir_num_serie(){cout << num_serie; }};class disco_musica : public disco{private:char * tipo; //CD,vinilo, mini-disc, etc.cancion * lista_canciones;//Suponemos la//existencia de una clase “cancion”.public:disco_musica (int c, char* f, int n,char* t) : disco (c,f,n){strcpy(tipo,t);lista_canciones=NULL;}};

Page 3

Podemos redefinir el método imprimir del ejemplo anterior de la siguiente forma: void imprimir_fabricante(){cout << “Este disco de musica hasido grabado por: ” << fabricante; }//fabricante ha de ser protected! Si tenemos, por ejemplo,void main(){disco_musica d1(32,“EMI”,423,“CD”);disco * ptr = & d1;d1.imprimir_fabricante();//Invoca al de la clase derivada.ptr -> imprimir_fabricante();//Invoca al de la clase base.}

Cuando se invoca un método de un objeto de la clase derivada mediante un puntero a un objeto de la clase base, se trata al objeto como si fuera de la clase base.

Page 4

Si queremos modificar la clase disco para que se pueda sobrecargar su comportamiento cuando se acceda a la clase disco_musica a través de un puntero a disco pondríamos: class disco{protected:int capacidad;char * fabricante;int num_serie;public:disco (int c, char * f, int n){capacidad = c; strcpy(fabricante, f);num_serie=n;}void imprimir_capacidad(){cout << capacidad; }virtual void imprimir_fabricante(){cout << fabricante; }void imprimir_num_serie(){cout << num_serie; }};

Show full summary Hide full summary

Similar

Diapositivas de Diseño gráfico, evolución y tendencias
Samantha Molina Vega
Diseño gráfico, evolución y tendencias - APUNTE
escandoncb
Diseño gráfico, evolución y tendencias
Samantha Molina Vega
PRESENTACIÓN EN GOCONR
weownthenigh
Eliminacion de un nodo
LUIS FERNANDO RUIZ GARCIA
test de Diseño gráfico, evolución y tendencias
Samantha Molina Vega
Notación algoritmica
Jenni' Burbujeante
factores culturales que afectan las operaciones de los negocios internacionales
JOHANA HERNANDEZ
EL LIBRO Y SUS PARTES
A14N 3URT0N
Técnicas de recopilación.
onlyhyuk8
Diapositivas de Correcion y edicion de fotografia
efrainska