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 349 — #387<br />

✐<br />

12.3. Operadores sobrecargables<br />

int main() {<br />

After a, b;<br />

a, b; // Operator comma called<br />

Before c;<br />

1, c; // Operator comma called<br />

} ///:~<br />

Las funciones globales permit<strong>en</strong> situar la coma antes del objeto <strong>en</strong> cuestión. El<br />

uso mostrado es bastante oscuro y cuestionable. Probablem<strong>en</strong>te podría una lista separada<br />

por comas como parte de una expresión más complicada, es demasiado refinado<br />

<strong>en</strong> la mayoría de las ocasiones.<br />

El operador -><br />

El operador -> se usa g<strong>en</strong>eralm<strong>en</strong>te cuando quiere hacer que un objeto parezca<br />

un puntero. Este tipo de objeto se suele llamar puntero intelig<strong>en</strong>te o más a m<strong>en</strong>udo<br />

por su equival<strong>en</strong>te <strong>en</strong> inglés: smart pointer. Resultan especialm<strong>en</strong>te utiles si quiere<br />

«<strong>en</strong>volver» una clase con un puntero para hacer que ese puntero sea seguro, o <strong>en</strong><br />

la forma común de un iterador, que es un objeto que se mueve a través de una<br />

colección o cont<strong>en</strong>edor de otros objetos y los selecciona de uno <strong>en</strong> uno cada<br />

vez, sin proporcionar acceso directo a la implem<strong>en</strong>tación del cont<strong>en</strong>edor. (A m<strong>en</strong>udo<br />

<strong>en</strong>contrará iteradores y cont<strong>en</strong>edores <strong>en</strong> las librerías de clases, como <strong>en</strong> la Biblioteca<br />

Estándar de <strong>C++</strong>, descrita <strong>en</strong> el volum<strong>en</strong> 2 de este libro).<br />

El operador de indirección de punteros (*) debe ser un método. Ti<strong>en</strong>e otras restricciones<br />

atípicas: debe devolver un objeto (o una refer<strong>en</strong>cia a un objeto) que también<br />

t<strong>en</strong>ga un operador de indirección de punteros, o debe devolver un puntero que pueda<br />

ser usado para <strong>en</strong>contrar a lo que apunta la flecha del operador de indireción de<br />

punteros. He aquí un ejemplo simple:<br />

//: C12:SmartPointer.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() const { cout

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

Saved successfully!

Ooh no, something went wrong!