Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐