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 404 — #442<br />

✐<br />

Capítulo 14. Her<strong>en</strong>cia y Composición<br />

X() { i = 0; }<br />

void set(int ii) { i = ii; }<br />

int read() const { return i; }<br />

int permute() { return i = i * 47; }<br />

};<br />

#<strong>en</strong>dif // USEFUL_H ///:~<br />

En esta clase los miembros son privados, y <strong>en</strong>tonces, es completam<strong>en</strong>te seguro<br />

declarar un objeto del tipo X público <strong>en</strong> la nueva clase, y por ello, permitir una interfaz<br />

directa:<br />

//: C14:Composition.cpp<br />

// Reuse code with composition<br />

#include "Useful.h"<br />

class Y {<br />

int i;<br />

public:<br />

X x; // Embedded object<br />

Y() { i = 0; }<br />

void f(int ii) { i = ii; }<br />

int g() const { return i; }<br />

};<br />

int main() {<br />

Y y;<br />

y.f(47);<br />

y.x.set(37); // Access the embedded object<br />

} ///:~<br />

Para acceder a las funciones miembro alojadas <strong>en</strong> el objeto (referido como subobjeto)<br />

simplem<strong>en</strong>te requiere otra selección del miembro.<br />

Es habitual hacer privado el objeto alojado, y por ello, formar parte de la capa<br />

de implem<strong>en</strong>tación (lo que significa que es posible cambiar la implem<strong>en</strong>tación si se<br />

desea). La interfaz de funciones de la nueva clase implica el uso del objeto alojado,<br />

pero no necesariam<strong>en</strong>te imita a la interfaz del objeto.<br />

//: C14:Composition2.cpp<br />

// Private embedded objects<br />

#include "Useful.h"<br />

class Y {<br />

int i;<br />

X x; // Embedded object<br />

public:<br />

Y() { i = 0; }<br />

void f(int ii) { i = ii; x.set(ii); }<br />

int g() const { return i * x.read(); }<br />

void permute() { x.permute(); }<br />

};<br />

int main() {<br />

Y y;<br />

y.f(47);<br />

404<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!