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 72 — #110<br />

✐<br />

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

q.<br />

3.2.7. switch<br />

Una s<strong>en</strong>t<strong>en</strong>cia switch selecciona un fragm<strong>en</strong>to de código <strong>en</strong>tre varios posibles<br />

<strong>en</strong> base al valor de una expresión <strong>en</strong>tera. Su estructura es:<br />

switch(selector) {<br />

case valor-<strong>en</strong>tero1 : s<strong>en</strong>t<strong>en</strong>cia; break;<br />

case valor-<strong>en</strong>tero2 : s<strong>en</strong>t<strong>en</strong>cia; break;<br />

case valor-<strong>en</strong>tero3 : s<strong>en</strong>t<strong>en</strong>cia; break;<br />

case valor-<strong>en</strong>tero4 : s<strong>en</strong>t<strong>en</strong>cia; break;<br />

case valor-<strong>en</strong>tero5 : s<strong>en</strong>t<strong>en</strong>cia; break;<br />

(...)<br />

default: s<strong>en</strong>t<strong>en</strong>cia;<br />

}<br />

selector es una expresión que produce un valor <strong>en</strong>tero. El switch compara<br />

el resultado de selector para cada valor <strong>en</strong>tero. Si <strong>en</strong>cu<strong>en</strong>tra una coincid<strong>en</strong>cia, se<br />

ejecutará la s<strong>en</strong>t<strong>en</strong>cia correspondi<strong>en</strong>te (sea simple o compuesta). Si no se <strong>en</strong>cu<strong>en</strong>tra<br />

ninguna coincid<strong>en</strong>cia se ejecutará la s<strong>en</strong>t<strong>en</strong>cia default.<br />

Se puede observar <strong>en</strong> la definición anterior que cada case acaba con un break,<br />

lo que causa que la ejecución salte hasta el final del cuerpo del switch (la llave final<br />

que cierra el switch). Esta es la forma conv<strong>en</strong>cional de construir una s<strong>en</strong>t<strong>en</strong>cia switch,<br />

pero la palabra break es opcional. Si no se indica, el case que se ha cumplido<br />

«cae» al sigui<strong>en</strong>te de la lista. Esto significa, que el código del sigui<strong>en</strong>te case, se<br />

ejecutara hasta que se <strong>en</strong>cu<strong>en</strong>tre un break. Aunque normalm<strong>en</strong>te no se desea este<br />

tipo de comportami<strong>en</strong>to, puede ser de ayuda para un programador experim<strong>en</strong>tado.<br />

La s<strong>en</strong>t<strong>en</strong>cia switch es una manera limpia de implem<strong>en</strong>tar una selección multimodo<br />

(por ejemplo, seleccionando de <strong>en</strong>tre un número de paths de ejecución), pero<br />

requiere un selector que pueda evaluarse como un <strong>en</strong>tero <strong>en</strong> el mom<strong>en</strong>to de la compilación.<br />

Si quisiera utilizar, por ejemplo, un objeto string como selector, no funcionará<br />

<strong>en</strong> una s<strong>en</strong>t<strong>en</strong>cia switch. Para un selector de tipo string, se debe utilizar<br />

una serie de s<strong>en</strong>t<strong>en</strong>cias if y comparar el string d<strong>en</strong>tro de la condición.<br />

El ejemplo del m<strong>en</strong>u demostrado anteriorm<strong>en</strong>te proporciona un ejemplo particularm<strong>en</strong>te<br />

interesante de un switch:<br />

//: C03:M<strong>en</strong>u2.cpp<br />

// A m<strong>en</strong>u using a switch statem<strong>en</strong>t<br />

#include <br />

using namespace std;<br />

int main() {<br />

bool quit = false; // Flag for quitting<br />

while(quit == false) {<br />

cout > response;<br />

switch(response) {<br />

case ’a’ : cout

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

Saved successfully!

Ooh no, something went wrong!