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

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

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

Saved successfully!

Ooh no, something went wrong!