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 215 — #253<br />

✐<br />

7.5. Elección <strong>en</strong>tre sobrecarga y argum<strong>en</strong>tos por defecto<br />

con<br />

void f(int x, int = 0, float = 1.1);<br />

En <strong>C++</strong>, la definición de la función tampoco necesita id<strong>en</strong>tificadores:<br />

void f(int x, int, float flt) { /* ... */ }<br />

En el cuerpo de la función, se puede hacer refer<strong>en</strong>cia a x y a flt, pero no al<br />

argum<strong>en</strong>to de <strong>en</strong> medio puesto que no ti<strong>en</strong>e nombre. A pesar de esto, las llamadas a<br />

función deb<strong>en</strong> proporcionar un valor para este argum<strong>en</strong>to de rell<strong>en</strong>o: f(1) ó f(1,<br />

2, 3,0). Esta sintaxis permite poner el argum<strong>en</strong>to como un argum<strong>en</strong>to de rell<strong>en</strong>o<br />

sin utilizarlo. La idea es que podría querer cambiar la definición de la función para<br />

utilizar el argum<strong>en</strong>to de rell<strong>en</strong>o más tarde, sin cambiar todo el código <strong>en</strong> que ya<br />

se invoca la función. Por supuesto, puede obt<strong>en</strong>er el mismo resultado utilizando<br />

un argum<strong>en</strong>to con nombre, pero <strong>en</strong> ese caso está defini<strong>en</strong>do el argum<strong>en</strong>to para el<br />

cuerpo de la función sin que éste lo utilice, y la mayoría de los compiladores darán<br />

un m<strong>en</strong>saje de aviso, dando por hecho que usted ha cometido un error. Si deja el<br />

argum<strong>en</strong>to sin nombre int<strong>en</strong>cionadam<strong>en</strong>te, evitará la advert<strong>en</strong>cia.<br />

Más importante, si empieza utilizando un argum<strong>en</strong>to que más tarde decide dejar<br />

de utilizar, puede quitarlo sin g<strong>en</strong>erar avisos ni fastidiar al código cli<strong>en</strong>te que esté<br />

utilizando la versión anterior de la función.<br />

7.5. Elección <strong>en</strong>tre sobrecarga y argum<strong>en</strong>tos por<br />

defecto<br />

Tanto la sobrecarga de funciones como los argum<strong>en</strong>tos por defecto resultan útiles<br />

para ponerle nombre a las funciones. Sin embargo, a veces puede resultar confuso<br />

saber qué técnica utilizar. Por ejemplo, estudie la sigui<strong>en</strong>te herrami<strong>en</strong>ta que está diseñada<br />

para tratar automáticam<strong>en</strong>te bloques de memoria:<br />

//: C07:Mem.h<br />

#ifndef MEM_H<br />

#define MEM_H<br />

typedef unsigned char byte;<br />

class Mem {<br />

byte* mem;<br />

int size;<br />

void <strong>en</strong>sureMinSize(int minSize);<br />

public:<br />

Mem();<br />

Mem(int sz);<br />

~Mem();<br />

int msize();<br />

byte* pointer();<br />

byte* pointer(int minSize);<br />

};<br />

#<strong>en</strong>dif // MEM_H ///:~<br />

215<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!