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

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 351 — #389<br />

✐<br />

12.3. Operadores sobrecargables<br />

sp->g();<br />

Aquí, incluso aunque sp no ti<strong>en</strong>e métodos f() y g(), el operador de indirección<br />

de punteros automáticam<strong>en</strong>te llama a esas funciones para Obj* que es devuelto<br />

por SmartPointer::operator->. El compilador realiza todas las comprobaciones<br />

pertin<strong>en</strong>tes para asegurar que la llamada a función funciona de forma correcta.<br />

Aunque la mecánica subyac<strong>en</strong>te de los operadores de indirección de punteros es<br />

más compleja que la de los otros operadores, el objetivo es exactam<strong>en</strong>te el mismo:<br />

proporcionar una sintaxis más conv<strong>en</strong>i<strong>en</strong>te para los usuarios de sus clases.<br />

Un operador anidado<br />

Es más común ver un puntero intelig<strong>en</strong>te o un clase iteradora anidada d<strong>en</strong>tro de<br />

la clase a la que sirve. Se puede reescribir el ejemplo anterior para anidar SmartPointer<br />

d<strong>en</strong>tro de ObjContainer así:<br />

//: C12:NestedSmartPointer.cpp<br />

#include <br />

#include <br />

#include "../require.h"<br />

using namespace std;<br />

class Obj {<br />

static int i, j;<br />

public:<br />

void f() { cout

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

Saved successfully!

Ooh no, something went wrong!