Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/02/2011 #1


dev C++, dudas con clases y polimorfismo
Saludos, aunque se que el foro es enfocado en electronica, supongo que es muy cercana la duda con respecto a programacion en c que es muy afin.

He estudiado conceptos de clases, entonces, en especial un ejemplo de polimorfismo, muy simple, del cual tengo una duda que me inquieta ya que mis conocimientos son muy limitados, el ejemplo acontinuacion:

#include <iostream>
using namespace std;

class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
};

class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};

class CTriangle: public CPolygon {
public:
int area ()
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
CPolygon * ppoly1 = &rect;
CPolygon * ppoly2 = &trgl;
ppoly1->set_values (4,5);
ppoly2->set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
system ("PAUSE");
return 0;

}

La duda es, en las lineas 4 a 6 de la funcion main, se hace uso de ppoly1 y ppoly2, alguien me podria aclarar de donde salen estos "nombres" ya que no los veo declarados en ninguna linea, mil gracias de antemano.

ed. Por cierto, tambien desconozco que uso recibe el operador -> aunque presumo es de asiganacion.

Saludos.
24/02/2011 #2

Avatar de Dr. Zoidberg

nosferatuspacho dijo: Ver Mensaje
Saludos, aunque se que el foro es enfocado en electronica, supongo que es muy cercana la duda con respecto a programacion en c que es muy afin.
Bue....no tiene mucho que ver....

nosferatuspacho dijo: Ver Mensaje
He estudiado conceptos de clases, entonces, en especial un ejemplo de polimorfismo, muy simple, del cual tengo una duda que me inquieta ya que mis conocimientos son muy limitados, el ejemplo acontinuacion:

#include <iostream>
using namespace std;

class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
};

class CRectangle: public CPolygon {
public:
virtual int area ()
{ return (width * height); }
};

class CTriangle: public CPolygon {
public:
virtual int area ()
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
CPolygon * ppoly1 = &rect;
CPolygon * ppoly2 = &trgl;
ppoly1->set_values (4,5);
ppoly2->set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
system ("PAUSE");
return 0;
}
Habrás estudiado...pero bastante poco!
El comportamiento polimórfico solo "lo tiene" el método area, pero en realidad no tiene nada de polimórfico por que los métodos NO SON VIRTUALES --> ir a estudiar la palabra clave virtual.
Además, area debe formar parte de la interfaz pública de la superclase por que si nó...es inaccesible en forma polimórfica...tal como te ha pasado a vos, que has tenido que usar la propias referencias rect y trgl para invocar el método, cuando deberías hacerlo por medio de ppoly1 y ppoly2 respectivamente.

En resumen: el ejemplo que has hecho no sirve para nada!

nosferatuspacho dijo: Ver Mensaje
La duda es, en las lineas 4 a 6 de la funcion main, se hace uso de ppoly1 y ppoly2, alguien me podria aclarar de donde salen estos "nombres" ya que no los veo declarados en ninguna linea, mil gracias de antemano.
Tenés problemas en los ojos?

int main () {
CRectangle rect;
CTriangle trgl;
CPolygon * ppoly1 = &rect; // ACA ESTAN DECLARADOS!!!!
CPolygon * ppoly2 = &trgl;
ppoly1->set_values (4,5);
ppoly2->set_values (4,5);

cout << rect.area() << endl;
cout << trgl.area() << endl;
system ("PAUSE");
return 0;
}

nosferatuspacho dijo: Ver Mensaje
Por cierto, tambien desconozco que uso recibe el operador -> aunque presumo es de asiganacion.

No es de asignación!!!! Es el mismo operador -> del C ANSI!!!
Andá y estudiá punteros...
24/02/2011 #3


Saludos.
Me referia a que tienen mucho en comun creo que con los micros.
Satisfecho, aunque se entiende que esta muy apoderado del tema creo que no fue la mejor actitud, sin embargo me ha aclarado la duda en especifico de manera que estoy agradecido.
De hecho surgen nuevas dudas ya que el ejemplo no lo hice yo, asi que le comunicare a quien lo escribio refiriendose a un ejemplo de polimorfismo que no sabe nada y que se dedique a la carpinteria...
En fin me voy agradecido y sin animos de preguntar mas, me voy a buscar empleo de cotero gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.