elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  POLIMORFISMO!!! (Resuelto)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: POLIMORFISMO!!! (Resuelto)  (Leído 3,306 veces)
¡Micronet!

Desconectado Desconectado

Mensajes: 159



Ver Perfil
POLIMORFISMO!!! (Resuelto)
« en: 21 Octubre 2010, 00:54 am »

#include <iostream.h>
#include <conio.h>

class Figura {
public:
virtual void Dibujar () = 0;
};

class Punto : public Figura {
protected:
int x, y;

public:
Punto (int _x, int _y);

virtual void Dibujar ();
};

Punto::Punto (int _x, int _y)
{
x = _x;
y = _y;
}

void Punto::Dibujar ()
{
gotoxy (x, y);
cout << "*";
}

class Rectangulo : public Figura {
protected:
int x1, y1, x2, y2;

public:
Rectangulo (int _x1, int _y1, int _x2, int _y2);

virtual void Dibujar ();
};

Rectangulo::Rectangulo (int _x1, int _y1, int _x2, int _y2)
{
x1 = _x1;
y1 = _y1;
x2 = _x2;
y2 = _y2;
}

void Rectangulo::Dibujar ()
{
gotoxy (x1, y1);
for (int i = x1; i <= x2; i++)
cout << "*";
gotoxy (x1, y2);
for (int i = x1; i <= x2; i++)
cout << "*";
for (int i = y1 + 1; i < y2; i++){
gotoxy (x1, i);
cout << "*";
gotoxy (x2, i);
cout << "*";
}
}

void main ()
{
const int Max = 3;
Figura * * Figuras = new Figura * [Max];
Figuras
  • = new Punto (1,1);
Figuras [1] = new Rectangulo (3,3,10,10);
Figuras [2] = new Punto (12,12);
for (int i = 0; i < Max; i++)
Figuras ->Dibujar ();
cout << endl << "Pulse una tecla para terminar ...";
getch ();
}





Alguien me puede explicar este programa ¿?
esta basado en polimorfismo pero no le entiendo por mas que intento
lo encontre en 'Yahoo Preguntas' por si acaso creen que es mi tarea.
pero no lo es.

Es un ayuda personal para comprender mejor el polimorfismo


« Última modificación: 23 Octubre 2010, 02:18 am por ¡Micronet! » En línea


"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: POLIMORFISMO!!!
« Respuesta #1 en: 21 Octubre 2010, 09:51 am »

La idea del polimorfismo en POO es que puedes utilizar una función o tipo de una clase como si fuera de otra clase.

En tu ejemplo:

-Empiezas creando la clase abstracta Figura con un método virtual puro Dibujar, con esto obligarás a que las clases derivadas implementen el método.
De todos modos si la clase no fuera abstracta (si proporcionaras implementación al método virtual) después con la sobrecarga habría de todos modos polimorfismo...

-Creas una clase rectángulo y una clase punto que heredan de Figura y que implementan Dibujar, cada una con su constructor, métodos y tal.

-Finalmente se ve la utilidad en el main. Creas un array de figuras (la clase base), en una de las figuras asignas un punto, en otra un rectangulo y otro punto.
Después en el bucle si te fijas estás llamando siempre a Figuras->Dibujar(); pero dependiendo de la instancia a la que se refiera, Figuras se estará comportando como un punto o un rectangulo y generará el dibujo correspondiente. Sin polimorfismo esto no sería posible.

Saludos!

//edit
PD: Deberías utilizar la etiqueta code para postear código y que sea más legible.


« Última modificación: 21 Octubre 2010, 10:00 am por MazarD » En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
irc://irc.freenode.org/elhacker.net
klaussius

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: POLIMORFISMO!!!
« Respuesta #2 en: 22 Octubre 2010, 16:37 pm »

Imagínate objeto "Soldado_Con_Escopeta", y ahora imagínate al "sargento Main" señalándole, y diciendo "¡¡¡¡Soldado_Con_Escopeta.fuego(); !!!!". El soldado con escopeta dispara.

Ahora imagínate un objeto "Soldado_Con_Un_Mechero", y el "sargento Main" haciendo lo mismo "¡¡¡¡Soldado_Con_Un_Mechero.fuego(); !!!!". El soldado del mechero se lo tiende para encenderle un cigarro.

Aunque la orden del sargento ha sido la misma, cada uno ha reaccionado de una forma distinta. ¿Cómo ha sabido cada uno de los soldados lo que tenía que hacer, dos cosas distintas habiendo recibido ambos la misma orden?

Aunque la orden sea la misma, el soldado al que se refiere es distinto, y cada uno tiene definida una función distinta para reaccionar al escuchar la palabra "fuego". En otras palabras, en el mundo del C++ puedes tener todas las clases que quieras que respondan a la orden "fuego", siempre y cuando le digas a cada una lo que tiene que hacer cuando escuche la orden, y cada uno de los soldados obedecerá dependiendo de lo que él entienda que debe hacer, que no es ni más ni menos que lo que has definido.
En línea

Hazlo o no lo hagas, pero no lo intentes. (Yoda)
¡Micronet!

Desconectado Desconectado

Mensajes: 159



Ver Perfil
Re: POLIMORFISMO!!!
« Respuesta #3 en: 23 Octubre 2010, 01:52 am »



   MazarD & klaussius


Gracias compañeros ya entendi :)...
En línea


"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta sobre herencia y polimorfismo
Programación C/C++
Rodrigosolari 2 2,451 Último mensaje 6 Mayo 2012, 08:51 am
por Rodrigosolari
Opiniones Polimorfismo
Programación C/C++
anonimo12121 0 1,700 Último mensaje 21 Febrero 2013, 19:59 pm
por anonimo12121
[DUDA] Polimorfismo.
Programación C/C++
Zodiak98 2 2,194 Último mensaje 11 Junio 2016, 17:37 pm
por avesudra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines