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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 42 — #80<br />

✐<br />

Capítulo 2. Construir y usar objetos<br />

ejemplo, se puede declarar func1() con una apari<strong>en</strong>cia difer<strong>en</strong>te pero con el mismo<br />

significado:<br />

int func1(int l<strong>en</strong>gth, int width);<br />

Una puntualización<br />

Existe una difer<strong>en</strong>cia significativa <strong>en</strong>tre C y el <strong>C++</strong> para las funciones con lista de<br />

argum<strong>en</strong>tos vacía. En C, la declaración:<br />

int func2();<br />

significa «una funcion con cualquier número y tipo de argum<strong>en</strong>tos», lo cual anula<br />

la comprobación de tipos. En <strong>C++</strong>, sin embargo, significa «una función sin argum<strong>en</strong>tos».<br />

Definición de funciones<br />

La definición de funciones se parece a la declaración excepto <strong>en</strong> que ti<strong>en</strong><strong>en</strong> cuerpo.<br />

Un cuerpo es un conjunto de s<strong>en</strong>t<strong>en</strong>cias <strong>en</strong>cerradas <strong>en</strong>tre llaves. Las llaves indican<br />

el comi<strong>en</strong>zo y el final del código. Para dar a func1() una definición con un<br />

cuerpo vacío (un cuerpo que no conti<strong>en</strong>e código), escriba:<br />

int func1(int ancho, int largo) {}<br />

Note que <strong>en</strong> la definición de la función las llaves sustituy<strong>en</strong> el punto y coma.<br />

Como las llaves conti<strong>en</strong><strong>en</strong> una s<strong>en</strong>t<strong>en</strong>cia o grupo de s<strong>en</strong>t<strong>en</strong>cias, no es necesario un<br />

punto y coma. T<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta además que los argum<strong>en</strong>tos <strong>en</strong> la definición de la<br />

función deb<strong>en</strong> nombres si los quiere usar <strong>en</strong> el cuerpo de la función (como aquí no<br />

se usan, son opcionales).<br />

Sintaxis de declaración de variables<br />

El significado atribuido a la frase «declaración de variables» históricam<strong>en</strong>te ha<br />

sido confuso y contradictorio, y es importante que <strong>en</strong>ti<strong>en</strong>da el significado correcto<br />

para poder leer el código correctam<strong>en</strong>te. Una declaración de variable dice al compilador<br />

cómo es la variable. Dice al compilador, «Sé que no has visto este nombre<br />

antes, pero te prometo que existe <strong>en</strong> algún lugar, y que es una variable de tipo X».<br />

En una declaración de función, se da un tipo (el valor de retorno), el nombre<br />

de la función, la lista de argum<strong>en</strong>tos, y un punto y coma. Con esto el compilador<br />

ya ti<strong>en</strong>e sufici<strong>en</strong>te información para saber cómo será la función. Por infer<strong>en</strong>cia, una<br />

declaración de variable consistirá <strong>en</strong> un tipo seguido por un nombre. Por ejemplo:<br />

int a;<br />

podría declarar la variable a como un <strong>en</strong>tero usando la lógica usada anteriorm<strong>en</strong>te.<br />

Pero aquí está el conflicto: existe sufici<strong>en</strong>te información <strong>en</strong> el código anterior<br />

como para que el compilador pueda crear espacio para un <strong>en</strong>tero llamado a y es<br />

exactam<strong>en</strong>te lo que ocurre. Para resolver el dilema, fue necesaria una palabra reservada<br />

<strong>en</strong> C y <strong>C++</strong> para decir «Esto es sólo una declaración; esta variable estará<br />

definida <strong>en</strong> algún otro lado». La palabra reservada es extern que puede significar<br />

42<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!