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 318 — #356<br />
✐<br />
Capítulo 11. Las refer<strong>en</strong>cias y el constructor de copia<br />
D<strong>en</strong>tro del constructor de copia, se increm<strong>en</strong>ta el contador igual que <strong>en</strong> el constructor<br />
normal. Esto quiere decir que obt<strong>en</strong>drá un contador de objetos preciso cuando<br />
pase y retorne por valor.<br />
La función print() se ha modificado para imprimir <strong>en</strong> la salida un m<strong>en</strong>saje,<br />
el id<strong>en</strong>tificador del objeto y el contador de objetos. Como ahora accede al atributo<br />
name de un objeto concreto, ya no puede ser un método estático.<br />
D<strong>en</strong>tro de main() puede ver que hay una segunda llamada a f(). Sin embargo<br />
esta llamada utiliza la característica de C para ignorar el valor de retorno. Pero ahora<br />
que sabe cómo se retorna el valor (es decir, código d<strong>en</strong>tro de la función que maneja el<br />
proceso de retorno poni<strong>en</strong>do el resultado <strong>en</strong> un lugar cuya dirección se pasa como<br />
un argum<strong>en</strong>to escondido), podría preguntarse qué ocurre cuando se ignora el valor<br />
de retorno. La salida del programa mostrará alguna luz sobre el asunto.<br />
Pero antes de mostrar la salida, he aquí un pequeño programa que utiliza iostreams<br />
para añadir números de línea a cualquier archivo:<br />
//: C11:Lin<strong>en</strong>um.cpp<br />
//{T} Lin<strong>en</strong>um.cpp<br />
// Add line numbers<br />
#include "../require.h"<br />
#include <br />
#include <br />
#include <br />
#include <br />
#include <br />
using namespace std;<br />
int main(int argc, char* argv[]) {<br />
requireArgs(argc, 1, "Usage: lin<strong>en</strong>um file\n"<br />
"Adds line numbers to file");<br />
ifstream in(argv[1]);<br />
assure(in, argv[1]);<br />
string line;<br />
vector lines;<br />
while(getline(in, line)) // Read in <strong>en</strong>tire file<br />
lines.push_back(line);<br />
if(lines.size() == 0) return 0;<br />
int num = 0;<br />
// Number of lines in file determines width:<br />
const int width =<br />
int(log10((double)lines.size())) + 1;<br />
for(int i = 0; i < lines.size(); i++) {<br />
cout.setf(ios::right, ios::adjustfield);<br />
cout.width(width);<br />
cout