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 94 — #132<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

<strong>C++</strong> introduce el concepto de constantes con nombre que es lo mismo que variable,<br />

excepto que su valor no puede cambiar. El modificador const le indica al<br />

compilador que el nombre repres<strong>en</strong>ta una constante. Cualquier tipo de datos predefinido<br />

o definido por el usuario, puede ser definido como const. Si se define algo<br />

como const y luego se int<strong>en</strong>ta modificar, el compilador g<strong>en</strong>erará un error.<br />

Se debe especificar el tipo de un const, de este modo:<br />

const int x = 10;<br />

En C y <strong>C++</strong> Estándar, se puede usar una constante <strong>en</strong> una lista de argum<strong>en</strong>tos,<br />

incluso si el argum<strong>en</strong>to que ocupa es un puntero o una refer<strong>en</strong>cia (p.e, se puede<br />

obt<strong>en</strong>er la dirección de una constante). Las constantes ti<strong>en</strong><strong>en</strong> ámbito, al igual que<br />

una variable ordinaria, de modo que se puede «esconder» una constante d<strong>en</strong>tro de<br />

una función y estar seguro de que ese nombre no afectará al resto del programa.<br />

const ha sido tomado de <strong>C++</strong> e incorporado al C Estándar pero un modo un<br />

poco distinto. En C, el compilador trata a const del mismo modo que a una variable<br />

que tuviera asociado una etiqueta que dice «No me cambies». Cuando se define un<br />

const <strong>en</strong> C, el compilador pide espacio para él, de modo que si se define más de un<br />

const con el mismo nombre <strong>en</strong> dos ficheros distintos (o se ubica la definición <strong>en</strong> un<br />

fichero de cabeceras), el <strong>en</strong>lazador g<strong>en</strong>erará m<strong>en</strong>sajes de error sobre del conflicto. El<br />

concepto de const <strong>en</strong> C es difer<strong>en</strong>te de su utilización <strong>en</strong> <strong>C++</strong> (<strong>en</strong> resum<strong>en</strong>, es más<br />

bonito <strong>en</strong> <strong>C++</strong>).<br />

Valores constantes<br />

En <strong>C++</strong>, una constante debe t<strong>en</strong>er siempre un valor inicial (En C, eso no es cierto).<br />

Los valores de las constantes para tipos predefinidos se expresan <strong>en</strong> decimal, octal,<br />

hexadecimal, o números con punto flotante (desgraciadam<strong>en</strong>te, no se consideró que<br />

los binarios fues<strong>en</strong> importantes), o como caracteres.<br />

A falta de cualquier otra pista, el compilador assume que el valor de una constante<br />

es un número decimal. Los números 47, 0 y 1101 se tratan como números decimales.<br />

Un valor constante con un cero al principio se trata como un número octal (base<br />

8). Los números con base 8 pued<strong>en</strong> cont<strong>en</strong>er únicam<strong>en</strong>te dígitos del 0 al 7; el compilador<br />

interpreta otros dígitos como un error. Un número octal legítimo es 017 (15 <strong>en</strong><br />

base 10).<br />

Un valor constante con 0x al principio se trata como un número hexadecimal<br />

(base 16). Los números con base 16 pued<strong>en</strong> cont<strong>en</strong>er dígitos del 0 al 9 y letras de la a<br />

a la f o A a F. Un número hexadecimal legítimo es 0x1fe (510 <strong>en</strong> base 10).<br />

Los números <strong>en</strong> punto flotante pued<strong>en</strong> cont<strong>en</strong>er comas decimales y pot<strong>en</strong>cias<br />

expon<strong>en</strong>ciales (repres<strong>en</strong>tadas mediante e, lo que significa «10 elevado a»). Tanto el<br />

punto decimal como la e son opcionales. Si se asigna una constante a una variable<br />

de punto flotante, el compilador tomará el valor de la constante y la convertirá a<br />

un número <strong>en</strong> punto flotante (este proceso es una forma de lo que se conoce como<br />

conversión implícita de tipo). De todos modos, es una bu<strong>en</strong>a idea el usar el punto<br />

decimal o una e para recordar al lector que está utilizando un número <strong>en</strong> punto<br />

flotante; algunos compiladores incluso necesitan esta pista.<br />

Algunos valores válidos para una constante <strong>en</strong> punto flotante son: 1e4, 1.0001,<br />

47.0, 0.0 y 1.159e-77. Se pued<strong>en</strong> añadir sufijos para forzar el tipo de número de punto<br />

flotante: f o F fuerza que sea float, L o l fuerza que sea un long double; de lo<br />

94<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!