[C con Clase] Estructuras

Steven Davidson srd4121 en njit.edu
Jue Sep 11 16:43:09 CEST 2008


Hola Samuel,

Arkiant wrote:
> Buenas Salvador,
> Por lo que he entendido tanto una variable de la estructura constante
> como estatica si modifico remitiendome a la estructura anterior:
> 
> struct Monstruo
> {
>     char Nombre[50];
>     int Vida;
> }
> 
> si quiero hacer diferentes "Monstruo" con diferentes valores lo que
> he de hacer es dejarlo como ahora sin ser ni constante ni estatico y
> crear por ejemplo:
> 
> Monstruo Abes;
> Monstruo OvejaDollye;
> 
> Abes.Vida = 50;
> OvejaDollye.Vida = 100;
> 
> Con este código entiendo que se crearian dos Objetos diferentes que
> no tendrían nada que ver Abes con OvejaDollye, verdad? ( Bueno si que
> los dos son de la estructura Monstruo ), pero los valores de vida
> seria para Abes 50 y para OvejaDollye 100.
> 

Efectivamente. Piensa que son variables y por tanto podemos manipularlas 
como cualesquier otras variables. Por ejemplo,

int a = 10;
int b = a;

Monstruo orco1 = { "Garr", 120 };
Monstruo orco2 = orco1;

unsigned short int lista[] = { 4, 1, 20, 8, 2, 0, 0, 7 };

Todas estas declaraciones son para crear e inicializar variables. Ahora 
bien, para algunas variables podemos tratarlas de una manera especial. 
Para el caso de arrays, podemos acceder a sus elementos, que también son 
variables. Para el caso de las estructuras, accedemos a sus miembros de 
otra manera. En ambos casos, tenemos que acceder a cada variable "interna".

> y para ponerle nombre a dichos "Personajes" tendría que hacer como
> has descrito:
> 
> strcpy(Abes.Nombre, "Gran Abes"); 
> srtcpy(OvejaDollye, "Oveja Dollye");
> 
> Espero haberlo entendido bien.
> 

Casi. La última invocación sería:

strcpy( OvejaDolly.Nombre, "Oveja Dolly" );

> Y remitiendome a lo de los miembros constates y estaticos, me
> confundí porque al usar DevC++ intenté hacer algo así:
> 
> struct Monstruo
> {
>     int Vida = 50;
> }Abes;
> 
> y el mismo compilador me decia que int Vida no era ni constante ni
> estatica, y lo único que hice fué "hacer callar" al compilador sin
> tener nidea de lo que significaba dichas palabras reservadas.
> 

Eso casi nunca es una buena idea. Tienes que aceptar que los mensajes 
del compilador sirven para ayudarte, como una crítica constructiva, y no 
como acoso. :)

> Muchas grácias por aclararme estas dudas, aunque me da la impresión,
> que para un mejor funcionamiento de lo planteado tendré que llegar al
> tema de las clases ( o no, porque por lo que llevo leido del curso
> son casi identicas ) ^^.
> 

Exacto. Ambas construcciones son iguales excepto por el comportamiento 
por defecto de sus miembros. Para 'struct', los miembros son públicos 
por defecto, mientras que para 'class', los miembros son privados. No 
hay otra diferencia; lo que se puede hacer con 'class' se puede hacer 
con 'struct'.


Espero haber aclarado un poco más el tema.

Steven





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