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 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 />

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

Saved successfully!

Ooh no, something went wrong!