Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 276 — #314<br />
✐<br />
Capítulo 10. Control de nombres<br />
No obstante, a veces es deseable ret<strong>en</strong>er un valor <strong>en</strong>tre llamadas a función. Esto<br />
se puede lograr creando una variable global, pero <strong>en</strong>tonces esta variable no estará<br />
únicam<strong>en</strong>te bajo control de la función. C y <strong>C++</strong> permit<strong>en</strong> crear un objeto static<br />
d<strong>en</strong>tro de una función. El almac<strong>en</strong>ami<strong>en</strong>to de este objeto no se lleva a cabo <strong>en</strong> la<br />
pila sino <strong>en</strong> el área de datos estáticos del programa. Dicho objeto sólo se inicializa<br />
una vez, la primera vez que se llama a la función, y reti<strong>en</strong>e su valor <strong>en</strong>tre difer<strong>en</strong>tes<br />
invocaciones. Por ejemplo, la sigui<strong>en</strong>te función devuelve el sigui<strong>en</strong>te carácter del<br />
vector cada vez que se la llama:<br />
//: C10:StaticVariablesInfunctions.cpp<br />
#include "../require.h"<br />
#include <br />
using namespace std;<br />
char oneChar(const char* charArray = 0) {<br />
static const char* s;<br />
if(charArray) {<br />
s = charArray;<br />
return *s;<br />
}<br />
else<br />
require(s, "un-initialized s");<br />
if(*s == ’\0’)<br />
return 0;<br />
return *s++;<br />
}<br />
char* a = "abcdefghijklmnopqrstuvwxyz";<br />
int main() {<br />
// oneChar(); // require() fails<br />
oneChar(a); // Initializes s to a<br />
char c;<br />
while((c = oneChar()) != 0)<br />
cout