Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 436 — #474<br />
✐<br />
Capítulo 15. Polimorfismo y Funciones virtuales<br />
compilador.<br />
Usted se puede <strong>en</strong>contrar atascado <strong>en</strong> el nivel de "programación basada <strong>en</strong> objetos"<br />
debido a que es de fácil acceso y no requiere mucho esfuerzo m<strong>en</strong>tal. Es también<br />
s<strong>en</strong>cillo s<strong>en</strong>tir cómo está creando tipos de datos - usted hace clases y objetos, <strong>en</strong>vía<br />
m<strong>en</strong>sajes a esos objetos, y todo es bonito y pulcro.<br />
Pero no sea tonto. Si se para aquí, se está perdi<strong>en</strong>do una de las más importantes<br />
partes del l<strong>en</strong>guaje, que significa el salto a la verdadera programación ori<strong>en</strong>tada a<br />
objetos. Y esto se consigue únicam<strong>en</strong>te con las funciones virtuales.<br />
Las funciones virtuales realzan el concepto de tipo <strong>en</strong> lugar de simplem<strong>en</strong>te <strong>en</strong>capsular<br />
código d<strong>en</strong>tro de estructuras y dejarlo detrás de un muro, por lo que son, sin<br />
lugar a dudas, el concepto más difícil a des<strong>en</strong>trañar por los nuevos programadores<br />
<strong>en</strong> <strong>C++</strong>. Sin embargo, son también el punto decisivo para compr<strong>en</strong>der la programación<br />
ori<strong>en</strong>tada a objetos. Si no usa funciones virtuales, todavía no <strong>en</strong>ti<strong>en</strong>de la POO.<br />
Debido a que las funciones virtuales están intimam<strong>en</strong>te unidas al concepto de<br />
tipo, y los tipos son el núcleo de la programación ori<strong>en</strong>tada a objetos, no existe analogía<br />
a las funciones virtuales d<strong>en</strong>tro de los l<strong>en</strong>guajes procedurales. Como programador<br />
procedural, usted no ti<strong>en</strong>e refer<strong>en</strong>te con el que comparar las funciones virtuales,<br />
al contrario de las otras características del l<strong>en</strong>guaje. Las características de un l<strong>en</strong>guaje<br />
procedural pued<strong>en</strong> ser <strong>en</strong>t<strong>en</strong>didas <strong>en</strong> un nivel algorítmico, pero las funciones<br />
virtuales deb<strong>en</strong> ser <strong>en</strong>t<strong>en</strong>didas desde el punto de vista del diseño.<br />
15.2. Upcasting<br />
En el Capítulo 14 se vió como un objeto puede ser usado como un objeto de su<br />
propio tipo o como un objeto de su tipo base. Además el objeto puede ser manejado a<br />
través de su tipo base. Tomar la dirección de un objeto (o un puntero o una refer<strong>en</strong>cia)<br />
y tratarlo como la dirección de su tipo base se conoce como upcasting 1 debido al<br />
camino que se g<strong>en</strong>era <strong>en</strong> los árboles de her<strong>en</strong>cia que se suel<strong>en</strong> pintar con la clase<br />
base <strong>en</strong> la cima.<br />
También se vió surgir un problema el cuál está <strong>en</strong>carnado <strong>en</strong> el sigui<strong>en</strong>te código:<br />
//: C15:Instrum<strong>en</strong>t2.cpp<br />
// Inheritance & upcasting<br />
#include <br />
using namespace std;<br />
<strong>en</strong>um note { middleC, Csharp, Eflat }; // Etc.<br />
class Instrum<strong>en</strong>t {<br />
public:<br />
void play(note) const {<br />
cout