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 353 — #391<br />

✐<br />

12.3. Operadores sobrecargables<br />

función. Aunque podría definir varias funciones sobrecargadas operator() con<br />

difer<strong>en</strong>tes argum<strong>en</strong>tos, a m<strong>en</strong>udo se usa para tipos que solo ti<strong>en</strong><strong>en</strong> una operación<br />

simple, o al m<strong>en</strong>os una especialm<strong>en</strong>te destacada. En el Volum<strong>en</strong>2 verá que la Librería<br />

Estándar de <strong>C++</strong> usa el operador de llamada a función para crear «objetos-función».<br />

Para crear un operator->* debe primero crear una clase con un operator(-<br />

) que sea el tipo de objeto que operator->* devolverá. Esta clase debe, de algún<br />

modo, capturar la información necesaria para que cuando operator() sea llamada<br />

(lo que sucede automáticam<strong>en</strong>te), el puntero a miembro sea indireccionado para el<br />

objeto. En el sigui<strong>en</strong>te ejemplo, el constructor de FunctionObject captura y almac<strong>en</strong>a<br />

el puntero al objeto y el puntero a la función miembro, y <strong>en</strong>tonces operator()<br />

los usa para hacer la verdadera llamada puntero a miembro:<br />

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

#include <br />

using namespace std;<br />

class Dog {<br />

public:<br />

int run(int i) const {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!