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 422 — #460<br />
✐<br />
Capítulo 14. Her<strong>en</strong>cia y Composición<br />
Debe p<strong>en</strong>sar det<strong>en</strong>idam<strong>en</strong>te antes de utilizar la her<strong>en</strong>cia privada <strong>en</strong> vez de la<br />
composición; la her<strong>en</strong>cia privada ti<strong>en</strong>e complicaciones particulares cuando son combinadas<br />
con la id<strong>en</strong>tificación de tipos <strong>en</strong> tiempo de ejecución (es un tema de un capítulo<br />
<strong>en</strong> el volum<strong>en</strong> 2, disponible <strong>en</strong> www.BruceEckel.com)<br />
14.6. Protected<br />
Ahora que ya sabe que es la her<strong>en</strong>cia, la palabra reservada protected ya ti<strong>en</strong>e significado.<br />
En un mundo ideal, los miembros privados siempre serian fijos-y-rápidos,<br />
pero <strong>en</strong> los proyectos reales hay ocasiones cuando se desea ocultar algo a todo el<br />
mundo y todavía permitir accesos a los miembros de la clase derivada. La palabra<br />
clave protected es un movimi<strong>en</strong>to al pragmatismo: este dice "Esto es privado como la<br />
clase usuario <strong>en</strong> cuestión, pero disponible para cualquiera que hereda de esta clase.<br />
La mejor manera es dejar los miembros de datos privados - siempre debe preservar<br />
su derecho de cambiar la capa de implem<strong>en</strong>tación. Entonces puede permitir<br />
acceso controlado a los herederos de su clase a través de funciones miembro protegidas:<br />
//: C14:Protected.cpp<br />
// The protected keyword<br />
#include <br />
using namespace std;<br />
class Base {<br />
int i;<br />
protected:<br />
int read() const { return i; }<br />
void set(int ii) { i = ii; }<br />
public:<br />
Base(int ii = 0) : i(ii) {}<br />
int value(int m) const { return m*i; }<br />
};<br />
class Derived : public Base {<br />
int j;<br />
public:<br />
Derived(int jj = 0) : j(jj) {}<br />
void change(int x) { set(x); }<br />
};<br />
int main() {<br />
Derived d;<br />
d.change(10);<br />
} ///:~<br />
Encontrará ejemplos de la necesidad de uso de protected más adelante y <strong>en</strong> el<br />
volum<strong>en</strong> 2.<br />
14.6.1. Her<strong>en</strong>cia protegida<br />
Cuando se hereda, por defecto la clase base es privada, que significa que todos<br />
las funciones miembro publicas son privadas para el usuario <strong>en</strong> la nueva clase. Nor-<br />
422<br />
✐<br />
✐<br />
✐<br />
✐