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 450 — #488<br />
✐<br />
Capítulo 15. Polimorfismo y Funciones virtuales<br />
función <strong>en</strong> una clase sea declarada como virtual pura, la VTABLE estará incompleta.<br />
Si la VTABLE de una clase está incompleta, ¿qué se supone que debe hacer el<br />
compilador cuando algui<strong>en</strong> int<strong>en</strong>te crear un objeto de esa clase No sería seguro<br />
crear un objeto de esa clase abstracta, por lo que se obt<strong>en</strong>dría un error de parte del<br />
compilador. Dicho de otra forma, el compilador garantiza la pureza de una clase<br />
abstracta. Hacer clases abstractas asegura que el programador cli<strong>en</strong>te no puede hacer<br />
mal uso de ellas.<br />
Aquí t<strong>en</strong>emos Instrum<strong>en</strong>t4.cpp modificado para usar funciones virtuales puras.<br />
Debido a que la clase no ti<strong>en</strong>e otra cosa que no sea funciones virtuales, se la<br />
llama clase abstracta pura:<br />
//: C15:Instrum<strong>en</strong>t5.cpp<br />
// Pure abstract base classes<br />
#include <br />
using namespace std;<br />
<strong>en</strong>um note { middleC, Csharp, Cflat }; // Etc.<br />
class Instrum<strong>en</strong>t {<br />
public:<br />
// Pure virtual functions:<br />
virtual void play(note) const = 0;<br />
virtual char* what() const = 0;<br />
// Assume this will modify the object:<br />
virtual void adjust(int) = 0;<br />
};<br />
// Rest of the file is the same ...<br />
class Wind : public Instrum<strong>en</strong>t {<br />
public:<br />
void play(note) const {<br />
cout