[C con Clase] Duda de novato - herencia con estructuras (LázaroVG)

Lázaro VG lazarozrl en gmail.com
Mar Dic 17 16:52:20 CET 2013


Un ejemplo sencillo con estructuras, es  más fácil con clases solo declaras
el valor por defecto como otro miembro estático en lugar de un valor
externo a la estructura
por cierto dices instanciar pero es iniciar (inicializar valores de
miembros) instanciar es como el la linea que dice " Punto
pt1=Punto(25.8,32.5);" es decir estas creando una instancia de la
estructura o clase.

#include <iostream>
#include <math.h>

using namespace std;

double _xDef=0.0;
double _yDef=0.0;
double _zDef=0.0;

typedef struct Punto
{
  public:
      double X;
      double Y;
      double Z;

    Punto(double cx=NAN, double cy=NAN, double cz=NAN)
    {
        X=isnan(cx) ? _xDef : cx;
        Y=isnan(cy) ? _yDef : cy;
        Z=isnan(cz) ? _zDef : cz;
    }

};
int main()
{
    char c;
    Punto pt1=Punto(25.8,32.5);
    _zDef=20.21;
    Punto pt2=Punto(25.3,100.25);

    cout << "Prueba 01\n" << endl;
    cout << "Punto1 ("<<pt1.X<<","<<pt1.Y<<","<<pt1.Z<<")"<<endl;
    cout << "Punto2 ("<<pt2.X<<","<<pt2.Y<<","<<pt2.Z<<")"<<endl;
    cin>>c;
    return 0;
}

Para cambiar el valor de una coordenada a todas las clases descendientes no
se como accesar las clases(estructuras) descendientes. La única más
sencilla es recorrer cada instancia ya sea que las tengas en un array
Punto[] o algún contenedor como un vector o una lista vector<Punto*> ,
list<Punto*>

espero te sirva!!


El 16/12/13 10:36, Miguel Ángel Torres Fernández-Píñar escribió:

> > Gracias Alexis por tu respuesta.
> >
> > Es que no me expliqué bien.
> >
> > Imagínate que tengo que instanciar cuarenta objetos de esta esta
> > estructura punto :
> >
> > punto a;
> > punto b;
> > punto c;
> >
> > .....
> >
> > Imagínate que en tiempo de ejecución calculo la coordenada Z que va a
> > ser común a todos los objetos, pongamos Z = 200;
> >
> > Ahora para instanciar los objetos podría hacer :
> >
> > a.x = 10;
> > a.y = 20;
> > a.z = 200;
> >
> > b.x = 30;
> > b.y = 8;
> > b.z = 200;
> >
> > c.x = 5;
> > c.y = 15;
> > c.z = 200;
> >
> > ......
> >
> > Y la pregunta es. ¿ Cómo podría usar el concepto de herencia o algo
> > similar para no tener que estar repitiendo la coordenada Z en todos
> > los objetos ???
> > ¿Se podría hacer creando una estructura padre que tuviera las tres
> > coordenadas y luego que las estructuras hijas sobreescribieran tan
> > sólo la X y la Y, y herederan la Z de la estructura padre ???
> >
> > Gracias y saludos a todos y FELIZ NAVIDAD !!!!!!!!
>
> Si tienes 40 objetos, no creo que los llames a, b, c?
> Lo lógico será que crees un vector o un array. Por ejemplo punto
> mis_puntos[40]; En cuyo caso, es tan sencillo como iterar por la
> estructura:
>
> for (int i = 0; i < 40; i++)
> mis_puntos[i].z = 200;
>
> ¡Feliz Navidad!
>
>
>
>
> ------------------------------
>
> Message: 2
> Date: Tue, 17 Dec 2013 08:28:34 +0100
> From: Miguel Ángel Torres Fernández-Píñar
>         <miguelangeltorresfp en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda de novato - herencia con estructuras.
> Message-ID:
>         <CAD4u4V1b14fnrDdR6_5=YhqR+z42k2qTXFVrf8ans=
> cFPcRKDw en mail.gmail.com>
> Content-Type: text/plain; charset="windows-1252"
>
> Gracias.
>
> Si, en este caso tienes toda la razón.
>
> Pero aun así, ¿ no habría una forma de que cambiándole la propiedad a la
> clase o estructura padre se cambiara también en las hijas ?.
>
> Saludos !!!
>
>
> El 16 de diciembre de 2013, 21:13, Programante <programante en gmail.com
> >escribió:
>
> > El 16/12/13 10:36, Miguel Ángel Torres Fernández-Píñar escribió:
> >
> >  Gracias Alexis por tu respuesta.
> >>
> >> Es que no me expliqué bien.
> >>
> >> Imagínate que tengo que instanciar cuarenta objetos de esta esta
> >> estructura punto :
> >>
> >> punto a;
> >> punto b;
> >> punto c;
> >>
> >> .....
> >>
> >> Imagínate que en tiempo de ejecución calculo la coordenada Z que va a
> ser
> >> común a todos los objetos, pongamos Z = 200;
> >>
> >> Ahora para instanciar los objetos podría hacer :
> >>
> >> a.x = 10;
> >> a.y = 20;
> >> a.z = 200;
> >>
> >> b.x = 30;
> >> b.y = 8;
> >> b.z = 200;
> >>
> >> c.x = 5;
> >> c.y = 15;
> >> c.z = 200;
> >>
> >> ......
> >>
> >> Y la pregunta es. ¿ Cómo podría usar el concepto de herencia o algo
> >> similar para no tener que estar repitiendo la coordenada Z en todos los
> >> objetos ???
> >> ¿Se podría hacer creando una estructura padre que tuviera las tres
> >> coordenadas y luego que las estructuras hijas sobreescribieran tan sólo
> la
> >> X y la Y, y herederan la Z de la estructura padre ???
> >>
> >> Gracias y saludos a todos y FELIZ NAVIDAD !!!!!!!!
> >>
> >
> > Si tienes 40 objetos, no creo que los llames a, b, c?
> > Lo lógico será que crees un vector o un array. Por ejemplo punto
> > mis_puntos[40]; En cuyo caso, es tan sencillo como iterar por la
> estructura:
> >
> > for (int i = 0; i < 40; i++)
> > mis_puntos[i].z = 200;
> >
> > ¡Feliz Navidad!
> >
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131217/5521e0ce/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 3
> Date: Tue, 17 Dec 2013 09:10:40 +0100
> From: Jose Cabrera <josmaca en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda de novato - herencia con estructuras.
> Message-ID:
>         <
> CAMKX1TDPb0Za8c_YGbU18k_tkFfhvVrb2r+7-5qoqrrmLA9C_Q en mail.gmail.com>
> Content-Type: text/plain; charset="windows-1252"
>
> En el constructor pon ese valor por defecto, si es siempre el mismo.
>
>
> El 16 de diciembre de 2013, 21:13, Programante <programante en gmail.com
> >escribió:
>
> > El 16/12/13 10:36, Miguel Ángel Torres Fernández-Píñar escribió:
> >
> >  Gracias Alexis por tu respuesta.
> >>
> >> Es que no me expliqué bien.
> >>
> >> Imagínate que tengo que instanciar cuarenta objetos de esta esta
> >> estructura punto :
> >>
> >> punto a;
> >> punto b;
> >> punto c;
> >>
> >> .....
> >>
> >> Imagínate que en tiempo de ejecución calculo la coordenada Z que va a
> ser
> >> común a todos los objetos, pongamos Z = 200;
> >>
> >> Ahora para instanciar los objetos podría hacer :
> >>
> >> a.x = 10;
> >> a.y = 20;
> >> a.z = 200;
> >>
> >> b.x = 30;
> >> b.y = 8;
> >> b.z = 200;
> >>
> >> c.x = 5;
> >> c.y = 15;
> >> c.z = 200;
> >>
> >> ......
> >>
> >> Y la pregunta es. ¿ Cómo podría usar el concepto de herencia o algo
> >> similar para no tener que estar repitiendo la coordenada Z en todos los
> >> objetos ???
> >> ¿Se podría hacer creando una estructura padre que tuviera las tres
> >> coordenadas y luego que las estructuras hijas sobreescribieran tan sólo
> la
> >> X y la Y, y herederan la Z de la estructura padre ???
> >>
> >> Gracias y saludos a todos y FELIZ NAVIDAD !!!!!!!!
> >>
> >
> > Si tienes 40 objetos, no creo que los llames a, b, c?
> > Lo lógico será que crees un vector o un array. Por ejemplo punto
> > mis_puntos[40]; En cuyo caso, es tan sencillo como iterar por la
> estructura:
> >
> > for (int i = 0; i < 40; i++)
> > mis_puntos[i].z = 200;
> >
> > ¡Feliz Navidad!
> >
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131217/0c4f3fe3/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 4
> Date: Tue, 17 Dec 2013 11:04:17 +0100
> From: Jose Cabrera <josmaca en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda de novato - herencia con estructuras.
> Message-ID:
>         <
> CAMKX1TCNCzd1yqZW9crtAcLpSdpxOvZ+rNUYQzHbQenMSq1pmA en mail.gmail.com>
> Content-Type: text/plain; charset="windows-1252"
>
> Si claro si lo cambias en el padre, por ejemplo en el constructor pones por
> defecto ese valor a 200, cuando creas el constructor del hijo solo tienes
> que hacer una llamada al contructor del padre para que se ponga
>
>
> El 17 de diciembre de 2013, 8:28, Miguel Ángel Torres Fernández-Píñar <
> miguelangeltorresfp en gmail.com> escribió:
>
> > Gracias.
> >
> > Si, en este caso tienes toda la razón.
> >
> > Pero aun así, ¿ no habría una forma de que cambiándole la propiedad a la
> > clase o estructura padre se cambiara también en las hijas ?.
> >
> > Saludos !!!
> >
> >
> > El 16 de diciembre de 2013, 21:13, Programante <programante en gmail.com
> >escribió:
> >
> >> El 16/12/13 10:36, Miguel Ángel Torres Fernández-Píñar escribió:
> >>
> >>  Gracias Alexis por tu respuesta.
> >>>
> >>> Es que no me expliqué bien.
> >>>
> >>> Imagínate que tengo que instanciar cuarenta objetos de esta esta
> >>> estructura punto :
> >>>
> >>> punto a;
> >>> punto b;
> >>> punto c;
> >>>
> >>> .....
> >>>
> >>> Imagínate que en tiempo de ejecución calculo la coordenada Z que va a
> >>> ser común a todos los objetos, pongamos Z = 200;
> >>>
> >>> Ahora para instanciar los objetos podría hacer :
> >>>
> >>> a.x = 10;
> >>> a.y = 20;
> >>> a.z = 200;
> >>>
> >>> b.x = 30;
> >>> b.y = 8;
> >>> b.z = 200;
> >>>
> >>> c.x = 5;
> >>> c.y = 15;
> >>> c.z = 200;
> >>>
> >>> ......
> >>>
> >>> Y la pregunta es. ¿ Cómo podría usar el concepto de herencia o algo
> >>> similar para no tener que estar repitiendo la coordenada Z en todos los
> >>> objetos ???
> >>> ¿Se podría hacer creando una estructura padre que tuviera las tres
> >>> coordenadas y luego que las estructuras hijas sobreescribieran tan
> sólo la
> >>> X y la Y, y herederan la Z de la estructura padre ???
> >>>
> >>> Gracias y saludos a todos y FELIZ NAVIDAD !!!!!!!!
> >>>
> >>
> >> Si tienes 40 objetos, no creo que los llames a, b, c?
> >> Lo lógico será que crees un vector o un array. Por ejemplo punto
> >> mis_puntos[40]; En cuyo caso, es tan sencillo como iterar por la
> estructura:
> >>
> >> for (int i = 0; i < 40; i++)
> >> mis_puntos[i].z = 200;
> >>
> >> ¡Feliz Navidad!
> >>
> >>
> >>
> >> _______________________________________________
> >> Lista de correo Cconclase Cconclase en listas.conclase.net
> >>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> >> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >>
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131217/8d3f8942/attachment.html
> >
>
> ------------------------------
>
> Message: 5
> Date: Tue, 17 Dec 2013 11:07:59 +0100
> From: Borja Ilundain <borjailundain en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda de novato - herencia con estructuras.
> Message-ID:
>         <
> CA++dL9Yg7oBiuFCCs7EzB_tCD9Rb2ersShzMcKkROf_aPey+fQ en mail.gmail.com>
> Content-Type: text/plain; charset="windows-1252"
>
> Hola!
>
> Se me ocurre que la forma más fácil de hacer lo que pretendes sería definir
> el atributo Z de la estructura padre como static, sin embargo, esto hace
> que sólo pueda tomar un único valor que se comparte para todos los objetos
> de esa clase, por lo que si quieres que exista algún objeto con un valor
> diferente, habría que emplear otra opción.
>
> http://c.conclase.net/curso/index.php?cap=033#MOD_STATIC
>
> Un saludo.
>
>
> El 17 de diciembre de 2013, 8:28, Miguel Ángel Torres Fernández-Píñar <
> miguelangeltorresfp en gmail.com> escribió:
>
> > Gracias.
> >
> > Si, en este caso tienes toda la razón.
> >
> > Pero aun así, ¿ no habría una forma de que cambiándole la propiedad a la
> > clase o estructura padre se cambiara también en las hijas ?.
> >
> > Saludos !!!
> >
> >
> > El 16 de diciembre de 2013, 21:13, Programante <programante en gmail.com
> >escribió:
> >
> >> El 16/12/13 10:36, Miguel Ángel Torres Fernández-Píñar escribió:
> >>
> >>  Gracias Alexis por tu respuesta.
> >>>
> >>> Es que no me expliqué bien.
> >>>
> >>> Imagínate que tengo que instanciar cuarenta objetos de esta esta
> >>> estructura punto :
> >>>
> >>> punto a;
> >>> punto b;
> >>> punto c;
> >>>
> >>> .....
> >>>
> >>> Imagínate que en tiempo de ejecución calculo la coordenada Z que va a
> >>> ser común a todos los objetos, pongamos Z = 200;
> >>>
> >>> Ahora para instanciar los objetos podría hacer :
> >>>
> >>> a.x = 10;
> >>> a.y = 20;
> >>> a.z = 200;
> >>>
> >>> b.x = 30;
> >>> b.y = 8;
> >>> b.z = 200;
> >>>
> >>> c.x = 5;
> >>> c.y = 15;
> >>> c.z = 200;
> >>>
> >>> ......
> >>>
> >>> Y la pregunta es. ¿ Cómo podría usar el concepto de herencia o algo
> >>> similar para no tener que estar repitiendo la coordenada Z en todos los
> >>> objetos ???
> >>> ¿Se podría hacer creando una estructura padre que tuviera las tres
> >>> coordenadas y luego que las estructuras hijas sobreescribieran tan
> sólo la
> >>> X y la Y, y herederan la Z de la estructura padre ???
> >>>
> >>> Gracias y saludos a todos y FELIZ NAVIDAD !!!!!!!!
> >>>
> >>
> >> Si tienes 40 objetos, no creo que los llames a, b, c?
> >> Lo lógico será que crees un vector o un array. Por ejemplo punto
> >> mis_puntos[40]; En cuyo caso, es tan sencillo como iterar por la
> estructura:
> >>
> >> for (int i = 0; i < 40; i++)
> >> mis_puntos[i].z = 200;
> >>
> >> ¡Feliz Navidad!
> >>
> >>
> >>
> >> _______________________________________________
> >> Lista de correo Cconclase Cconclase en listas.conclase.net
> >>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> >> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >>
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131217/81a728fb/attachment.html
> >
>
> ------------------------------
>
> Subject: Pié de página del digest
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> ------------------------------
>
> Fin de Resumen de Cconclase, Vol 91, Envío 6
> ********************************************
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131217/6387f7f5/attachment.html>


Más información sobre la lista de distribución Cconclase