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 348 — #386<br />

✐<br />

Capítulo 12. Sobrecarga de operadores<br />

valor de retorno externo. La tercera, se llama al destructor para tmp cuando sale del<br />

ámbito.<br />

En contraste, la aproximación de «devolver un objeto temporal» funciona de manera<br />

bastante difer<strong>en</strong>te. Cuando el compilador ve eso, sabe que no ti<strong>en</strong>e otra razón<br />

para crearlo mas que para devolverlo. El compilador aprovecha la v<strong>en</strong>taja que ofrece<br />

para construir el objeto directam<strong>en</strong>te <strong>en</strong> la localización del valor de retorno externo a<br />

la función. Esto necesita de una sola y ordinaria llamada al constructor (la llamada al<br />

constructor de copia no es necesaria) y no hay llamadas al destructor porque nunca<br />

se crea un objeto local. De esta manera, no requiere nada más que el conocimi<strong>en</strong>to<br />

del programador, y es significativam<strong>en</strong>te mas efici<strong>en</strong>te. Esto a m<strong>en</strong>udo se llama<br />

optimización del valor de retorno.<br />

12.3.4. Operadores poco usuales<br />

Varios operadores adicionales ti<strong>en</strong><strong>en</strong> una forma ligeram<strong>en</strong>te difer<strong>en</strong>te de ser sobrecargados.<br />

El subíndice, operator[] debe ser un método y precisa de un único argum<strong>en</strong>to.<br />

Dado que operator[] implica que el objeto que está si<strong>en</strong>do utilizado como un<br />

array, a m<strong>en</strong>udo devolverá una refer<strong>en</strong>cia de este operador, así que puede ser conv<strong>en</strong>i<strong>en</strong>tem<strong>en</strong>te<br />

usado <strong>en</strong> la parte derecha de un signo de igualdad. Este operador es<br />

muy comúnm<strong>en</strong>te sobrecargado; verá ejemplos <strong>en</strong> el resto del libro.<br />

Los operadores new y delete controlan la reserva dinámica de almac<strong>en</strong>ami<strong>en</strong>to<br />

y se pued<strong>en</strong> sobrecargar de muchas maneras difer<strong>en</strong>tes. Este tema se cubre <strong>en</strong> el<br />

capitulo 13.<br />

El operador coma<br />

El operador coma se llama cuando aparece después de un objeto del tipo para el<br />

que está definido. Sin embargo, «operator,» no se llama para listas de argum<strong>en</strong>tos<br />

de funciones, sólo para objetos fuera de ese lugar separados por comas. No parece<br />

haber un montón de usos prácticos para este operador, solo es por consist<strong>en</strong>cia del<br />

l<strong>en</strong>guaje. He aquí un ejemplo que muestra como la función coma se puede llamar<br />

cuando aparece antes de un objeto, así como después:<br />

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

#include <br />

using namespace std;<br />

class After {<br />

public:<br />

const After& operator,(const After&) const {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!