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 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 />
✐