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