<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Delujoooo, muchas gracias!!<BR>
saludoss<BR> <BR>> Date: on, 25 May 2009 14:07:47 -0400<BR>> From: srd4121@njit.edu<BR>> To: cconclase@listas.conclase.net<BR>> Subject: Re: [C con Clase] Incluir una estructura privada dentro de una clase.<BR>> <BR>> Hola Augusto,<BR>> <BR>> Augusto wrote:<BR>> <BR>> > Muy buenas!<BR>> > Necesito una manito con el tema de clases y estructuras.<BR>> > Necesito hacer una clase que almacene basicamente:<BR>> > <BR>> > include<iostream><BR>> > using namespace std;<BR>> > <BR>> > class una{ <BR>> > private:<BR>> > struct uno{int mu; float su;};<BR>> > struct dos{int md; float sd;}; <BR>> > char Nombre[100]; <BR>> > <BR>> > public: <BR>> > //aca irian un par de variables y varias funciones...<BR>> > void funcion(){};<BR>> > }; //fin class<BR>> > int main()<BR>> > {<BR>> > // desde main se llaman a las funciones de la clase "una".<BR>> > // la idea es instanciar 5 objetos "una" de las cuales cada una contiene:<BR>> > // un Nombre.<BR>> > // y<BR>> > // dos estructuras las cuales van almacenando datos que son ingresados por teclado.<BR>> > }<BR>> > <BR>> > El problema esta en que no se como hacer para manejarme con las<BR>> > estructuras dentro de las funciones public o desde main.<BR>> > Supongo que debo manejarme con puntero, pero como los declaro?,<BR>> > donde?, en el contructor o en la funcion?<BR>> > La verdad que busque info en muchos libros y paginas, pero no<BR>> > encontre nada.<BR>> <BR>> En primer lugar, debes declarar las variables de las estructuras en la <BR>> clase 'una' para que sean miembros de tal clase. Por ahora, sólo has <BR>> declarado 'Nombre' como el único dato miembro de 'una'. Si quieres más <BR>> datos miembro de la clase 'una', entonces necesitas declararlos. Según <BR>> la metodología de la POO, deberíamos definir los datos miembro en <BR>> privado. Por lo tanto, escribimos,<BR>> <BR>> clase una<BR>> {<BR>> private:<BR>> char Nombre[100];<BR>> uno unObj;<BR>> dos dosObj;<BR>> <BR>> public:<BR>> ...<BR>> };<BR>> <BR>> Si necesitas controlar la información de cada estructura directamente a <BR>> través de un objeto de la clase 'una', entonces sólo necesitas proveer <BR>> las funciones públicas de 'una' para tal control. Por ejemplo,<BR>> <BR>> clase una<BR>> {<BR>> ...<BR>> public:<BR>> una();<BR>> void asignarMu( int m ) { unObj.mu = m; }<BR>> void asignarSu( float s ) { unObj.su = s; }<BR>> ...<BR>> int obtenerMu() const { return unObj.mu; }<BR>> float obtenerSu() const { return unObj.su; }<BR>> ...<BR>> };<BR>> <BR>> De esta forma, nadie sabe que tienes dos estructuras como miembros en la <BR>> clase 'una'.<BR>> <BR>> Si no quieres esconder tanto, entonces puedes crear funciones miembro <BR>> para enviar las estructuras miembro de la clase 'una'. Por ejemplo,<BR>> <BR>> clase una<BR>> {<BR>> ...<BR>> public:<BR>> una();<BR>> void asignarUno( const uno &obj ) { unObj = obj; }<BR>> void asignarDos( const dos &obj ) { dosObj = obj; }<BR>> ...<BR>> uno obtenerUno() const { return unObj; }<BR>> dos obtenerDos() const { return dosObj; }<BR>> ...<BR>> };<BR>> <BR>> Esto significa que la clase 'una' ofrece ciertos detalles internos de su <BR>> clase. En este caso, cualquier código externo a esta clase puede <BR>> manipular las dos estructuras. Sin embargo, esto también significa que <BR>> debes dar a conocer la definición de tales estructuras 'uno' y 'dos'. <BR>> Para esto, deberás definir las estructuras públicamente. Esto es,<BR>> <BR>> class una<BR>> {<BR>> public:<BR>> struct uno { int mu; float su; };<BR>> struct dos { int md; float sd; };<BR>> <BR>> private:<BR>> uno unObj;<BR>> dos dosObj;<BR>> char Nombre[100];<BR>> <BR>> public:<BR>> ...<BR>> };<BR>> <BR>> Ahora, por ejemplo, 'main()' puede acceder a cada tipo de la clase 'una' <BR>> directamente, pero no puede acceder a cada variable de ambas <BR>> estructuras. Por ejemplo,<BR>> <BR>> int main()<BR>> {<BR>> una::uno o1 = { 10, 4.5 };<BR>> una::dos o2 = { -1, -.3 };<BR>> <BR>> una obj;<BR>> obj.asignarUno( o1 );<BR>> obj.asignarDos( o2 );<BR>> <BR>> cout << obj.obtenerUno().mu << ',' << obj.obtenerUno().su << endl;<BR>> cout << obj.obtenerDos().md << ',' << obj.obtenerDos().sd << endl;<BR>> <BR>> return;<BR>> }<BR>> <BR>> Como puedes ver, podemos acceder a cada estructura, pero sólo a través <BR>> de las funciones miembro de la clase 'una'.<BR>> <BR>> <BR>> Espero haber aclarado las dudas.<BR>> <BR>> Steven<BR>> <BR>> <BR>> _______________________________________________<BR>> Lista de correo Cconclase Cconclase@listas.conclase.net<BR>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<BR><br /><hr /> <a href='http://clk.atdmt.com/MRT/go/119462413/direct/01/' target='_new'>Stay up to date on your PC, the Web, and your mobile phone with Windows Live</a></body>
</html>