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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

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

✐<br />

3.8. Creación de tipos compuestos<br />

Una cosa a t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta es la torpeza de usar Structure1 (como salta a la vista,<br />

eso sólo se requiere <strong>en</strong> C, y no <strong>en</strong> <strong>C++</strong>). En C, no se puede poner Structure1 cuando<br />

se defin<strong>en</strong> variables, se debe poner struct Structure1. Aquí es donde typedef se<br />

vuelve especialm<strong>en</strong>te útil <strong>en</strong> C:<br />

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

// Using typedef with struct<br />

typedef struct {<br />

char c;<br />

int i;<br />

float f;<br />

double d;<br />

} Structure2;<br />

int main() {<br />

Structure2 s1, s2;<br />

s1.c = ’a’;<br />

s1.i = 1;<br />

s1.f = 3.14;<br />

s1.d = 0.00093;<br />

s2.c = ’a’;<br />

s2.i = 1;<br />

s2.f = 3.14;<br />

s2.d = 0.00093;<br />

} ///:~<br />

Usando typedef de este modo, se puede simular (<strong>en</strong> C; int<strong>en</strong>tar eliminar el t-<br />

ypedef para <strong>C++</strong>) que Structure2 es un tipo predefinido, como int o float, cuando<br />

define s1 y s2 (pero se ha de t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta de que sólo ti<strong>en</strong>e información - características<br />

- y no incluye comportami<strong>en</strong>to, que es lo que se obti<strong>en</strong>e con objetos reales<br />

<strong>en</strong> <strong>C++</strong>). Observe que el struct se ha declarado al principio, porque el objetivo es<br />

crear el typedef. Sin embargo, hay veces <strong>en</strong> las que sería necesario referirse a struct<br />

durante su definición. En esos casos, se puede repetir el nombre del struct<br />

como tal y como typedef.<br />

//: C03:SelfRefer<strong>en</strong>tial.cpp<br />

// Allowing a struct to refer to itself<br />

typedef struct SelfRefer<strong>en</strong>tial {<br />

int i;<br />

SelfRefer<strong>en</strong>tial* sr; // Head spinning yet<br />

} SelfRefer<strong>en</strong>tial;<br />

int main() {<br />

SelfRefer<strong>en</strong>tial sr1, sr2;<br />

sr1.sr = &sr2;<br />

sr2.sr = &sr1;<br />

sr1.i = 47;<br />

sr2.i = 1024;<br />

} ///:~<br />

Si lo observa det<strong>en</strong>idam<strong>en</strong>te, puede ver que sr1 y sr2 apuntan el uno al otro,<br />

guardando cada uno una parte de la información.<br />

111<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!