Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 180 — #218<br />
✐<br />
Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />
} ///:~<br />
La clase (class) <strong>en</strong> un concepto OOP fundam<strong>en</strong>tal <strong>en</strong> <strong>C++</strong>. Es una de la palabras<br />
clave que no se pondrán <strong>en</strong> negrita <strong>en</strong> este libro - es incomodo pues se repite mucho.<br />
El cambio a clases es tan importante que sospecho que Stroustrup hubiese preferido<br />
eliminar completam<strong>en</strong>te struct, pero la necesidad de compatibilidad con C no lo<br />
hubiese permitido.<br />
Mucha g<strong>en</strong>te prefiere crear clases a la manera struct <strong>en</strong> vez de a la mánera<br />
class, pues sustituye el «por-defecto-private» de class empezando con los elem<strong>en</strong>tos<br />
public:<br />
class X {<br />
public:<br />
void miembro_de_interfaz();<br />
private:<br />
void miembro_privado();<br />
int repres<strong>en</strong>tacion_interna;<br />
};<br />
El porqué de esto es que ti<strong>en</strong>e más s<strong>en</strong>tido ver primero lo que más interesa, el programador<br />
cli<strong>en</strong>te puede ignorar todo lo que dice private. De hecho, la única razón<br />
de que todos los miembros deban ser declarados <strong>en</strong> la clase es que el compilador sepa<br />
como de grande son los objetos y pueda colocarlos correctam<strong>en</strong>te, garantizando<br />
así la consist<strong>en</strong>cia.<br />
De todas formas, los ejemplos <strong>en</strong> este libro pondrán los miembros privados primero,<br />
así:<br />
class X {<br />
void private_function();<br />
int internal_repres<strong>en</strong>tation;<br />
public:<br />
void interface_function();<br />
};<br />
Alguna g<strong>en</strong>te incluso decora sus nombres privados<br />
class Y {<br />
public:<br />
void f();<br />
private:<br />
int mX; // "Self-decorated" name<br />
};<br />
Como mX esta ya oculto para Y, la m (de «miembro») es innecesaria. De todas<br />
formas, <strong>en</strong> proyectos con muchas variables globales (algo que debe evitar a toda costa,<br />
aunque a veces inevitable <strong>en</strong> proyectos exist<strong>en</strong>tes), es de ayuda poder distinguir<br />
variables globales de atributos <strong>en</strong> la definición de los métodos.<br />
180<br />
✐<br />
✐<br />
✐<br />
✐