¡GoConqr estrena diseño! Cuéntanos qué te parece.

Apuntes

POLIMORFISMO

diazmtzal Español 4 páginas

Contenido del apunte (4)

Página 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

Página 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;}

};

Página 3

Podemos redefinir el método imprimir del ejemplo anterior de la siguiente forma:

void imprimir_fabricante(){

cout << “Este disco de musica ha

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

Página 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; }

};

Información

Descripción
Apunte
Creado por
diazmtzal · may 2016
Actualizado
5 may 2016
Visitas
25
Etiquetas
h1h2h3
Valoración

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?