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 365 — #403<br />

✐<br />

12.5. Sobrecargar la asignación<br />

conti<strong>en</strong>e [Spot], rc = 1<br />

Entrando <strong>en</strong> el constructor de copia<br />

Dog ñaadido:[Fido], rc = 2<br />

DogHouse constructor de copia<br />

[construido por copia FidoHouse]<br />

conti<strong>en</strong>e [Fido], rc = 2<br />

Despues de la óconstruccin por copia de Bobs<br />

fidos:[FidoHouse] conti<strong>en</strong>e [Fido], rc = 2<br />

spots:[SpotHouse] conti<strong>en</strong>e [Spot], rc = 1<br />

bobs:[construido por copia FidoHouse]<br />

conti<strong>en</strong>e[Fido], rc = 2<br />

Entrando spots = fidos<br />

Eliminando perro: [Spot], rc = 1<br />

Borrando Perro: [Spot], rc = 0ñ<br />

Aadido Dog: [Fido], rc = 3<br />

DogHouse operador= : [FidoHouse asignado]<br />

conti<strong>en</strong>e[Fido], rc = 3<br />

Despues de spots = fidos<br />

spots:[FidoHouse asignado] conti<strong>en</strong>e [Fido], rc = 3<br />

Entrando <strong>en</strong> la auto óasignacin<br />

DogHouse operador= : [construido por copia FidoHouse]<br />

conti<strong>en</strong>e [Fido], rc = 3<br />

Despues de la auto óasignacin<br />

bobs:[construido por copia FidoHouse]<br />

conti<strong>en</strong>e [Fido], rc = 3<br />

Entando r<strong>en</strong>ame("Bob")<br />

Despues de r<strong>en</strong>ame("Bob")<br />

DogHouse destructor: [construido por copia FidoHouse]<br />

conti<strong>en</strong>e [Fido], rc = 3<br />

Eliminando perro: [Fido], rc = 3<br />

DogHouse destructor: [FidoHouse asignado]<br />

conti<strong>en</strong>e [Fido], rc = 2<br />

Eliminando perro: [Fido], rc = 2<br />

DogHouse destructor: [FidoHouse]<br />

conti<strong>en</strong>e [Fido], rc = 1<br />

Eliminando perro: [Fido], rc = 1<br />

Borrando perro: [Fido], rc = 0<br />

Estudiando la salida, rastreando el código fu<strong>en</strong>te y experim<strong>en</strong>tando con el programa,<br />

podrá ahondar <strong>en</strong> la compr<strong>en</strong>sión de estas técnicas.<br />

Creación automática del operador =<br />

Dado que asignar un objeto a otro del mismo tipo es una operación que la mayoría<br />

de la g<strong>en</strong>te espera que sea posible, el compilador automáticam<strong>en</strong>te creará un type::operator=(type)<br />

si usted el programador no proporciona uno. El comportami<strong>en</strong>to<br />

de este operador imita el del constructor de copia creado automáticam<strong>en</strong>te;<br />

si la clase conti<strong>en</strong>e objetos (o se deriva de otra clase), se llama recursivam<strong>en</strong>te a o-<br />

perator= para esos objetos. A esto se le llama asignación miembro a miembro. Por<br />

ejemplo:<br />

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

#include <br />

using namespace std;<br />

class Cargo {<br />

public:<br />

365<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!