Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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