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.:oops:
 
Última edición:
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.... :D

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!

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.
:eek: :eek: :eek: Tenés problemas en los ojos? :eek: :eek: :eek:

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;
}

Por cierto, tambien desconozco que uso recibe el operador -> aunque presumo es de asiganacion.
:eek: :eek: :eek:
No es de asignación!!!! Es el mismo operador -> del C ANSI!!!
Andá y estudiá punteros...
 
Última edición:
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... (n)
En fin me voy agradecido y sin animos de preguntar mas, me voy a buscar empleo de cotero :LOL: gracias. :aplauso:
 
Atrás
Arriba