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 166 — #204<br />
✐<br />
Capítulo 4. Abstracción de Datos<br />
Como textlines se ll<strong>en</strong>a, el cont<strong>en</strong>ido de line se «clona» para cada push-<br />
() creando un new string(line). El valor devuelto por la expresión new es un<br />
puntero al nuevo string que fue creado y al que se ha copiado la información de la<br />
line. Si se hubiera pasado directam<strong>en</strong>te la dirección de line a push(), la Stack<br />
se ll<strong>en</strong>aría con direcciones idénticas, todas apuntando a line. Más adelante <strong>en</strong> ese<br />
libro apr<strong>en</strong>derá más sobre este proceso de «clonación».<br />
El nombre del fichero se toma de línea de comando. Para garantizar que hay sufici<strong>en</strong>tes<br />
argum<strong>en</strong>tos <strong>en</strong> la línea de comando, se usa una segunda función del fichero<br />
de cabecera require.h: requireArgs() que compara argc con el número de argum<strong>en</strong>tos<br />
deseado e imprime un m<strong>en</strong>saje de error y termina el programa si no hay<br />
sufici<strong>en</strong>tes argum<strong>en</strong>tos.<br />
4.8.1. Resolución de ámbito global<br />
El operador de resolución de ámbito puede ayudar <strong>en</strong> situaciones <strong>en</strong> las que el<br />
nombre elegido por el compilador (el nombre «más cercano») no es el que se quiere.<br />
Por ejemplo, suponga que ti<strong>en</strong>e una estructura con un id<strong>en</strong>tificador local a, y quiere<br />
seleccionar un id<strong>en</strong>tificador global a desde d<strong>en</strong>tro de un método. El compilador,<br />
por defecto, elegirá el local, de modo que es necesario decirle que haga otra cosa.<br />
Cuando se quiere especificar un nombre global usando la resolución de ámbito, debe<br />
usar el operador sin poner nada delante de él. A continuación aparece un ejemplo<br />
que muestra la resolución de ámbito global tanto para una variable como para una<br />
función:<br />
//: C04:Scoperes.cpp<br />
// Global scope resolution<br />
int a;<br />
void f() {}<br />
struct S {<br />
int a;<br />
void f();<br />
};<br />
void S::f() {<br />
::f(); // Would be recursive otherwise!<br />
::a++; // Select the global a<br />
a--; // The a at struct scope<br />
}<br />
int main() { S s; f(); } ///:~<br />
Sin resolución de ámbito <strong>en</strong> S::f(), el compilador elegiría por defecto las versiones<br />
miembro para f() y a.<br />
4.9. Resum<strong>en</strong><br />
166<br />
En este capítulo, ha apr<strong>en</strong>dido lo fundam<strong>en</strong>tal de <strong>C++</strong>: que puede poner funciones<br />
d<strong>en</strong>tro de las estructuras. Este nuevo tipo de estructura se llama tipo abstracto de<br />
dato, y las variables que se crean usando esta estructura se llaman objetos, o instancias,<br />
de ese tipo. Invocar un método de una objeto se d<strong>en</strong>omina <strong>en</strong>viar un m<strong>en</strong>saje al<br />
objeto. La actividad principal <strong>en</strong> la programación ori<strong>en</strong>tada a objetos es el <strong>en</strong>vío de<br />
✐<br />
✐<br />
✐<br />
✐