Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO Pensar en C++ (Volumen 1) - Grupo ARCO

arco.esi.uclm.es
from arco.esi.uclm.es More from this publisher
13.01.2015 Views

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 66 — #104 ✐ Capítulo 3. C en C++ } ///:~ En cfunc(), el primer if que comprueba que la condición sea true sale de la función con la sentencia return. Fíjese que la declaración de la función no es necesaria puesto que la definición aparece antes de ser utilizada en main(), de modo que el compilador sabe de su existencia desde dicha definición. 3.1.2. Uso de funciones de librerías C Todas las funciones en la librería local de funciones de C están disponibles cuando se programa en C++. Se debería buscar bien en la librería de funciones antes de definir una propia - hay muchas probabilidades de que alguien haya resuelto el problema antes, y probablemente haya dedicado más tiempo pensando y depurando. Una advertencia, del mismo modo: muchos compiladores incluyen muchas funciones extra que hacen la vida mucho mas fácil y resultan tentadoras, pero no son parte de la Librería C Estándar. Si está seguro de que jamás deseará portar la aplicación a otra plataforma (¿y quién está seguro de eso), adelante -utilice esas funciones y haga su vida más fácil. Si desea que la aplicación pueda ser portada, debería ceñirse únicamente al uso de funciones de la Librería Estándar. Si debe realizar actividades específicas de la plataforma, debería intentar aislar este código de tal modo que pueda cambiarse fácilmente al migrarlo a otra plataforma. En C++, las actividades de una plataforma específica a menudo se encapsulan en una clase, que es la solución ideal. La fórmula para usar una librería de funciones es la siguiente: primero, encontrar la función en la referencia de programación (muchas referencias de programación ordenan las funciones por categoría además de alfabéticamente). La descripción de la función debería incluir una sección que demuestre la sintaxis del código. La parte superior de esta sección tiene al menos una línea #include, mostrando el fichero principal que contiene el prototipo de función. Debe copiar este #include en su fichero para que la función esté correctamente declarada. Ahora puede llamar la función de la misma manera que aparece en la sección de sintaxis. Si comete un error, el compilador lo descubrirá comparando la llamada a la función con el prototipo de la cabecera e informará de dicho error. El enlazador busca en la Librería Estándar por defecto, de modo que lo único que hay que hacer es: incluir el fichero de cabecera y llamar a la función. 3.1.3. Creación de librerías propias Puede reunir funciones propias juntas en una librería. La mayoría de paquetes de programación vienen con un FIXME:bibliotecario que maneja grupos de módulos objeto. Cada FIXME:bibliotecario tiene sus propios comandos, pero la idea general es la siguiente: si se desea crear una librería, se debe hacer un fichero cabecera que contenga prototipos de todas las funciones de la librería. Hay que ubicar este fichero de cabecera en alguna parte de la ruta de búsqueda del preprocesador, ya sea en el directorio local (de modo que se podrá encontrar mediante #include "header") o bien en el directorio include (por lo que se podrá encontrar mediante #include ). Luego se han de juntar todos los módulos objeto y pasarlos al FIXME:bibliotecario junto con un nombre para la librería recién construida (la mayoría de los bibliotecarios requieren una extensión común, como por ejemplo .lib o .a). Se ha de ubicar la librería completa donde residan todas las demás, de ma- 66 ✐ ✐ ✐ ✐

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 67 — #105 ✐ 3.2. Control de flujo nera que el enlazador sabrá buscar esas funciones en dicha librería al ser invocadas. Pueden encontrar todos los detalles en su documentación particular, ya que pueden variar de un sistema a otro. 3.2. Control de flujo Esta sección cubre las sentencias de control de flujo en C++. Debe familiarizarse con estas sentencias antes de que pueda leer o escribir código C o C++. C++ usa todas las sentencias de control de ejecución de C. Esto incluye if-else, do-while, for, y una sentencia de selección llamada switch. C++ también admite el infame goto, el cual será evitado en este libro. 3.2.1. Verdadero y falso Todas las sentencias condicionales utilizan la veracidad o la falsedad de una expresión condicional para determinar el camino de ejecución. Un ejemplo de expresión condicional es A == B. Esto utiliza el operador condicional == para saber si la variable A es equivalente a la variable B. La expresión produce un booleano true o false (estas son palabras reservadas sólo en C++; en C una expresión es verdadera(true) si se evalúa con un valor diferente de cero). Otros operadores condicionales son >, =, etc. Las sentencias condicional se tratarán a fondo más adelante en este capítulo. 3.2.2. if-else La sentencia if-else puede existir de dos formas: con o sin el else. Las dos formas son: if (óexpresin) sentencia ó if (óexpresin) sentencia else sentencia La «expresión» se evalúa como true o false. La «sentencia» puede ser una simple acabada en un punto y coma, o bien una compuesta, lo que no es más que un grupo de sentencias simples encerradas entre llaves. Siempre que se utiliza la palabra «sentencia», implica que la sentencia es simple o compuesta. Tenga en cuenta que dicha sentencia puede ser incluso otro if, de modo que se pueden anidar. //: C03:Ifthen.cpp // Demonstration of if and if-else conditionals #include using namespace std; int main() { 67 ✐ ✐ ✐ ✐

✐<br />

✐<br />

✐<br />

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

✐<br />

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

} ///:~<br />

En cfunc(), el primer if que comprueba que la condición sea true sale de<br />

la función con la s<strong>en</strong>t<strong>en</strong>cia return. Fíjese que la declaración de la función no es<br />

necesaria puesto que la definición aparece antes de ser utilizada <strong>en</strong> main(), de modo<br />

que el compilador sabe de su exist<strong>en</strong>cia desde dicha definición.<br />

3.1.2. Uso de funciones de librerías C<br />

Todas las funciones <strong>en</strong> la librería local de funciones de C están disponibles cuando<br />

se programa <strong>en</strong> <strong>C++</strong>. Se debería buscar bi<strong>en</strong> <strong>en</strong> la librería de funciones antes de<br />

definir una propia - hay muchas probabilidades de que algui<strong>en</strong> haya resuelto el problema<br />

antes, y probablem<strong>en</strong>te haya dedicado más tiempo p<strong>en</strong>sando y depurando.<br />

Una advert<strong>en</strong>cia, del mismo modo: muchos compiladores incluy<strong>en</strong> muchas funciones<br />

extra que hac<strong>en</strong> la vida mucho mas fácil y resultan t<strong>en</strong>tadoras, pero no son<br />

parte de la Librería C Estándar. Si está seguro de que jamás deseará portar la aplicación<br />

a otra plataforma (¿y quién está seguro de eso), adelante -utilice esas funciones<br />

y haga su vida más fácil. Si desea que la aplicación pueda ser portada, debería ceñirse<br />

únicam<strong>en</strong>te al uso de funciones de la Librería Estándar. Si debe realizar actividades<br />

específicas de la plataforma, debería int<strong>en</strong>tar aislar este código de tal modo que pueda<br />

cambiarse fácilm<strong>en</strong>te al migrarlo a otra plataforma. En <strong>C++</strong>, las actividades de<br />

una plataforma específica a m<strong>en</strong>udo se <strong>en</strong>capsulan <strong>en</strong> una clase, que es la solución<br />

ideal.<br />

La fórmula para usar una librería de funciones es la sigui<strong>en</strong>te: primero, <strong>en</strong>contrar<br />

la función <strong>en</strong> la refer<strong>en</strong>cia de programación (muchas refer<strong>en</strong>cias de programación<br />

ord<strong>en</strong>an las funciones por categoría además de alfabéticam<strong>en</strong>te). La descripción de<br />

la función debería incluir una sección que demuestre la sintaxis del código. La parte<br />

superior de esta sección ti<strong>en</strong>e al m<strong>en</strong>os una línea #include, mostrando el fichero<br />

principal que conti<strong>en</strong>e el prototipo de función. Debe copiar este #include <strong>en</strong> su<br />

fichero para que la función esté correctam<strong>en</strong>te declarada. Ahora puede llamar la<br />

función de la misma manera que aparece <strong>en</strong> la sección de sintaxis. Si comete un error,<br />

el compilador lo descubrirá comparando la llamada a la función con el prototipo de<br />

la cabecera e informará de dicho error. El <strong>en</strong>lazador busca <strong>en</strong> la Librería Estándar por<br />

defecto, de modo que lo único que hay que hacer es: incluir el fichero de cabecera y<br />

llamar a la función.<br />

3.1.3. Creación de librerías propias<br />

Puede reunir funciones propias juntas <strong>en</strong> una librería. La mayoría de paquetes<br />

de programación vi<strong>en</strong><strong>en</strong> con un FIXME:bibliotecario que maneja grupos de módulos<br />

objeto. Cada FIXME:bibliotecario ti<strong>en</strong>e sus propios comandos, pero la idea g<strong>en</strong>eral<br />

es la sigui<strong>en</strong>te: si se desea crear una librería, se debe hacer un fichero cabecera que<br />

cont<strong>en</strong>ga prototipos de todas las funciones de la librería. Hay que ubicar este fichero<br />

de cabecera <strong>en</strong> alguna parte de la ruta de búsqueda del preprocesador, ya sea <strong>en</strong> el<br />

directorio local (de modo que se podrá <strong>en</strong>contrar mediante #include "header")<br />

o bi<strong>en</strong> <strong>en</strong> el directorio include (por lo que se podrá <strong>en</strong>contrar mediante #include<br />

). Luego se han de juntar todos los módulos objeto y pasarlos al<br />

FIXME:bibliotecario junto con un nombre para la librería recién construida (la mayoría<br />

de los bibliotecarios requier<strong>en</strong> una ext<strong>en</strong>sión común, como por ejemplo .lib<br />

o .a). Se ha de ubicar la librería completa donde residan todas las demás, de ma-<br />

66<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!