# dev C++, dudas con clases y polimorfismo



## nosferatuspacho (Feb 24, 2011)

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.


----------



## Dr. Zoidberg (Feb 24, 2011)

nosferatuspacho dijo:


> 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:


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


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:


> 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:


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


----------



## nosferatuspacho (Feb 24, 2011)

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.


----------

