Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO Pensar en C++ (Volumen 1) - Grupo ARCO

arco.esi.uclm.es
from arco.esi.uclm.es More from this publisher
13.01.2015 Views

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 336 — #374 ✐ Capítulo 12. Sobrecarga de operadores return *this; } const Byte operator++(int) { // Postfix cout

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 337 — #375 ✐ 12.3. Operadores sobrecargables de funciones miembro, si el compilador ve ++b, genera una llamada a B::operator++()y si ve b++genera una llamada a B::operator++(int). Todo lo que el usuario ve es que se llama a una función diferente para las versiones postfija y prefija. Internamente, sin embargo, las dos llamadas de funciones tienen diferentes firmas, así que conectan con dos cuerpos diferentes. El compilador pasa un valor constante ficticio para el argumento int (el cual nunca se proporcionada por un identificador porque el valor nunca se usa) para generar las diferentes firmas para la versión postfija. 12.3.2. Operadores binarios Los siguientes listados repiten el ejemplo de OverloadingUnaryOperators. cpp para los operadores binarios presentándole un ejemplo de todos los operadores que pueda querer sobrecargar. De nuevo se muestran ambas versiones, la global y la de método. //: C12:Integer.h // Non-member overloaded operators #ifndef INTEGER_H #define INTEGER_H #include // Non-member functions: class Integer { long i; public: Integer(long ll = 0) : i(ll) {} // Operators that create new, modified value: friend const Integer operator+(const Integer& left, const Integer& right); friend const Integer operator-(const Integer& left, const Integer& right); friend const Integer operator*(const Integer& left, const Integer& right); friend const Integer operator/(const Integer& left, const Integer& right); friend const Integer operator%(const Integer& left, const Integer& right); friend const Integer operator^(const Integer& left, const Integer& right); friend const Integer operator&(const Integer& left, const Integer& right); friend const Integer operator|(const Integer& left, const Integer& right); friend const Integer operator

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 337 — #375<br />

✐<br />

12.3. Operadores sobrecargables<br />

de funciones miembro, si el compilador ve ++b, g<strong>en</strong>era una llamada a B::operator++()y<br />

si ve b++g<strong>en</strong>era una llamada a B::operator++(int).<br />

Todo lo que el usuario ve es que se llama a una función difer<strong>en</strong>te para las versiones<br />

postfija y prefija. Internam<strong>en</strong>te, sin embargo, las dos llamadas de funciones<br />

ti<strong>en</strong><strong>en</strong> difer<strong>en</strong>tes firmas, así que conectan con dos cuerpos difer<strong>en</strong>tes. El compilador<br />

pasa un valor constante ficticio para el argum<strong>en</strong>to int (el cual nunca se proporcionada<br />

por un id<strong>en</strong>tificador porque el valor nunca se usa) para g<strong>en</strong>erar las difer<strong>en</strong>tes<br />

firmas para la versión postfija.<br />

12.3.2. Operadores binarios<br />

Los sigui<strong>en</strong>tes listados repit<strong>en</strong> el ejemplo de OverloadingUnaryOperators.<br />

cpp para los operadores binarios pres<strong>en</strong>tándole un ejemplo de todos los operadores<br />

que pueda querer sobrecargar. De nuevo se muestran ambas versiones, la global y la<br />

de método.<br />

//: C12:Integer.h<br />

// Non-member overloaded operators<br />

#ifndef INTEGER_H<br />

#define INTEGER_H<br />

#include <br />

// Non-member functions:<br />

class Integer {<br />

long i;<br />

public:<br />

Integer(long ll = 0) : i(ll) {}<br />

// Operators that create new, modified value:<br />

fri<strong>en</strong>d const Integer<br />

operator+(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator-(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator*(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator/(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator%(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator^(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator&(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator|(const Integer& left,<br />

const Integer& right);<br />

fri<strong>en</strong>d const Integer<br />

operator

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

Saved successfully!

Ooh no, something went wrong!