13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 112 — #150<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

En realidad, el nombre struct no ti<strong>en</strong>e que ser lo mismo que el nombre typedef,<br />

pero normalm<strong>en</strong>te se hace de esta manera ya que ti<strong>en</strong>de a simplificar las cosas.<br />

Punteros y estructuras<br />

En los ejemplos anteriores, todos los structs se manipulan como objetos. Sin<br />

embargo, como cualquier bloque de memoria, se puede obt<strong>en</strong>er la dirección de un<br />

objeto struct (tal como se ha visto <strong>en</strong> SelfRefer<strong>en</strong>tial.cpp). Para seleccionar<br />

los elem<strong>en</strong>tos de un objeto struct <strong>en</strong> particular, se utiliza un ., como se ha visto<br />

anteriorm<strong>en</strong>te. No obstante, si ti<strong>en</strong>e un puntero a un objeto struct, debe seleccionar<br />

un elem<strong>en</strong>to de dicho objeto utilizando un operador difer<strong>en</strong>te: el ->. A continuación,<br />

un ejemplo:<br />

//: C03:SimpleStruct3.cpp<br />

// Using pointers to structs<br />

typedef struct Structure3 {<br />

char c;<br />

int i;<br />

float f;<br />

double d;<br />

} Structure3;<br />

int main() {<br />

Structure3 s1, s2;<br />

Structure3* sp = &s1;<br />

sp->c = ’a’;<br />

sp->i = 1;<br />

sp->f = 3.14;<br />

sp->d = 0.00093;<br />

sp = &s2; // Point to a differ<strong>en</strong>t struct object<br />

sp->c = ’a’;<br />

sp->i = 1;<br />

sp->f = 3.14;<br />

sp->d = 0.00093;<br />

} ///:~<br />

En main(), el puntero sp está apuntando inicialm<strong>en</strong>te a s1, y los miembros de<br />

s1 se inicializan seleccionándolos con el -> (y se utiliza este mismo operador para<br />

leerlos). Pero luego sp apunta a s2, y esas variables se inicializan del mismo modo.<br />

Como puede ver, otro b<strong>en</strong>eficio <strong>en</strong> el uso de punteros es que pued<strong>en</strong> ser redirigidos<br />

dinámicam<strong>en</strong>te para apuntar a objetos difer<strong>en</strong>tes, eso proporciona más flexibilidad<br />

a sus programas, tal como verá.<br />

De mom<strong>en</strong>to, es todo lo que debe saber sobre struct, pero se s<strong>en</strong>tirá mucho<br />

más cómodo con ellos (y especialm<strong>en</strong>te con sus sucesores mas pot<strong>en</strong>tes, las clases) a<br />

medida que progrese <strong>en</strong> este libro.<br />

3.8.3. Programas más claros gracias a <strong>en</strong>um<br />

Un tipo de datos <strong>en</strong>umerado es una manera de asociar nombres a números, y<br />

por consigui<strong>en</strong>te de ofrecer más significado a algui<strong>en</strong> que lea el código. La palabra<br />

reservada <strong>en</strong>um (de C) <strong>en</strong>umera automáticam<strong>en</strong>te cualquier lista de id<strong>en</strong>tificadores<br />

que se le pase, asignándoles valores de 0, 1, 2, etc. Se pued<strong>en</strong> declarar variables <strong>en</strong>um<br />

(que se repres<strong>en</strong>tan siempre como valores <strong>en</strong>teros). La declaración de un <strong>en</strong>um se<br />

112<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!