[C con Clase] Estructuras y punteros
Angel Adrián Carrillo Comparán
squall_oggy en hotmail.com
Mar Feb 24 22:44:44 CET 2009
Muchas gracias Steven, tu siempre me sacas de dudas con los punteros =P
Usar direcciones de Internet con nombres es para niñitas.
Los verdaderos hombres memorizan las IPs de los sitios a los
que quieren acceder para evitar tener que pasar por el DNS....
Atte. Adrian (Oropher)
Mi Blog: http://www.oropher.com.mx/
> Date: Tue, 24 Feb 2009 15:35:54 -0500
> From: srd4121 en njit.edu
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] Estructuras y punteros
>
> Hola Ángel,
>
> Angel Adrián Carrillo Comparán wrote:
> > Tengo un problema con unos punteros, cuando mandoa llamar la funcion
> > de Leer(Cilindro &RefCil) esta manda a llamar a Leer(Circulo &RefC)
> > pasandole como parametro el puntero Circulo de la estructura de
> > Cilindro y esta funsion a su ves llama a Leer(Punto &RefP) pasandole
> > como parametro el puntero Punto de la estructura de Circulo.
> >
>
> Quiero aclarar que estos parámetros no son punteros sino referencias. Lo
> que sí es cierto es que en tu diseño, estas referencias contienen punteros.
>
> > El problema es que al leer los valores de punto y regresar a
> > Leer(Circulo &RefC) los valores de punto se mantienen, pero al
> > regresar a Leer(Cilindro &RefCil) los valores que tenia la estructura
> > de Punto ya no contienen valores, les pongo el programa que estoy
> > realizando, de ante mano muchas gracias!!!!
> >
>
> Esto es porque los punteros miembros de estas estructuras apuntan a
> variables locales, las cuales son destruidas nada más terminar su
> ámbito, que en estos casos es al terminar la función.
>
> Veamos el código fuente.
>
> > #include <iostream> //Para cout y cin
> > #include <conio.h> //Para getch() y clrscr() ó ystem
> > ("cls")
> > #include <iomanip> //Para setfill() y setw()
> > #include <stdio.h> //Para gets()
> > #include <math.h> //Para M_PI
> >
>
> Sugiero usar los nombres recientes: <cstdio> y <cmath>.
>
> [CORTE]
>
> > int main (void)
> > {
> > //clrscr();
> > system ("cls");
> > Cilindro Cil;
> > Leer (Cil);
> > cout << Cil.AptC->AptP->coordx << Cil.AptC->AptP->coordy;
> >
> > cout.setf (ios::fixed);
> > cout.setf (ios::showpoint);
> > cout.precision (2);
> >
> > Imprimir (Cil);
> > getch();
> > return 0;
> > } //fin de main ()
> >
> > void Leer (Punto &RefP)
> > {
> > cout << "\tDATOS DEL PUNTO\n"
> > << "\tIngresa la coordenada de X: ";
> > cin >> RefP.coordx;
> > cout << "\tIngresa la coordenada de Y: ";
> > cin >> RefP.coordy;
> > cout << endl;
> > } //fin de leer ()
> >
> > void Imprimir (Punto &RefP)
>
> Sugiero anteponer 'const' a este parámetro, ya que no tienes intención
> de modificar su contenido.
>
> > {
> > cout << "\tLas coordenadas del punto son: ["
> > << RefP.coordx << "," << RefP.coordy << "]" << endl << endl;
> > } //fin de imprimir ()
> >
> > void Leer (Circulo &RefC)
> > {
> > Punto P;
> > RefC.AptP=&P;
>
> Esto es un problema. El miembro 'AptP' apunta a una variable local 'P'.
> Esto significa que al terminar de ejecutar 'Leer()', la variable 'P' es
> destruida y por tanto el miembro 'AptP' apunta a "basura".
>
> > Leer (P);
> > //cout << P.coordx << P.coordy;
> > cout <<"***" << RefC.AptP->coordx << RefC.AptP->coordy;
> > cout <<"***" << P.coordx << P.coordy;
> > cout << "\tDATOS DEL CIRCULO\n"
> > << "\tIngresa el radio del circulo : " ;
> > cin >> RefC.Radio;
> > } //fin de leer()
> >
>
> Las funciones restantes parecidas a 'Leer()' tienen el mismo problema.
> La solución es usar memoria creada dinámicamente. Esto supone que tienes
> que liberar tal memoria al final del programa.
>
>
> Espero que esto te aclare la duda.
>
> Steven
>
>
> _______________________________________________
> 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
_________________________________________________________________
Personaliza Messenger como tú quieras.
http://download.live.com/messenger
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090224/f875a128/attachment.html>
Más información sobre la lista de distribución Cconclase