Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO Pensar en C++ (Volumen 1) - Grupo ARCO
✐ ✐ ✐ “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
- Page 323 and 324: ✐ ✐ ✐ “Volumen1” — 2012
- Page 325 and 326: ✐ ✐ ✐ “Volumen1” — 2012
- Page 327 and 328: ✐ ✐ ✐ “Volumen1” — 2012
- Page 329 and 330: ✐ ✐ ✐ “Volumen1” — 2012
- Page 331 and 332: ✐ ✐ ✐ “Volumen1” — 2012
- Page 333 and 334: ✐ ✐ ✐ “Volumen1” — 2012
- Page 335 and 336: ✐ ✐ ✐ “Volumen1” — 2012
- Page 337 and 338: ✐ ✐ ✐ “Volumen1” — 2012
- Page 339 and 340: ✐ ✐ ✐ “Volumen1” — 2012
- Page 341 and 342: ✐ ✐ ✐ “Volumen1” — 2012
- Page 343 and 344: ✐ ✐ ✐ “Volumen1” — 2012
- Page 345 and 346: ✐ ✐ ✐ “Volumen1” — 2012
- Page 347 and 348: ✐ ✐ ✐ “Volumen1” — 2012
- Page 349 and 350: ✐ ✐ ✐ “Volumen1” — 2012
- Page 351 and 352: ✐ ✐ ✐ “Volumen1” — 2012
- Page 353 and 354: ✐ ✐ ✐ “Volumen1” — 2012
- Page 355 and 356: ✐ ✐ ✐ “Volumen1” — 2012
- Page 357 and 358: ✐ ✐ ✐ “Volumen1” — 2012
- Page 359 and 360: ✐ ✐ ✐ “Volumen1” — 2012
- Page 361 and 362: ✐ ✐ ✐ “Volumen1” — 2012
- Page 363 and 364: ✐ ✐ ✐ “Volumen1” — 2012
- Page 365 and 366: ✐ ✐ ✐ “Volumen1” — 2012
- Page 367 and 368: ✐ ✐ ✐ “Volumen1” — 2012
- Page 369 and 370: ✐ ✐ ✐ “Volumen1” — 2012
- Page 371 and 372: ✐ ✐ ✐ “Volumen1” — 2012
- Page 373: ✐ ✐ ✐ “Volumen1” — 2012
- Page 377 and 378: ✐ ✐ ✐ “Volumen1” — 2012
- Page 379 and 380: ✐ ✐ ✐ “Volumen1” — 2012
- Page 381 and 382: ✐ ✐ ✐ “Volumen1” — 2012
- Page 383 and 384: ✐ ✐ ✐ “Volumen1” — 2012
- Page 385 and 386: ✐ ✐ ✐ “Volumen1” — 2012
- Page 387 and 388: ✐ ✐ ✐ “Volumen1” — 2012
- Page 389 and 390: ✐ ✐ ✐ “Volumen1” — 2012
- Page 391 and 392: ✐ ✐ ✐ “Volumen1” — 2012
- Page 393 and 394: ✐ ✐ ✐ “Volumen1” — 2012
- Page 395 and 396: ✐ ✐ ✐ “Volumen1” — 2012
- Page 397 and 398: ✐ ✐ ✐ “Volumen1” — 2012
- Page 399 and 400: ✐ ✐ ✐ “Volumen1” — 2012
- Page 401 and 402: ✐ ✐ ✐ “Volumen1” — 2012
- Page 403 and 404: ✐ ✐ ✐ “Volumen1” — 2012
- Page 405 and 406: ✐ ✐ ✐ “Volumen1” — 2012
- Page 407 and 408: ✐ ✐ ✐ “Volumen1” — 2012
- Page 409 and 410: ✐ ✐ ✐ “Volumen1” — 2012
- Page 411 and 412: ✐ ✐ ✐ “Volumen1” — 2012
- Page 413 and 414: ✐ ✐ ✐ “Volumen1” — 2012
- Page 415 and 416: ✐ ✐ ✐ “Volumen1” — 2012
- Page 417 and 418: ✐ ✐ ✐ “Volumen1” — 2012
- Page 419 and 420: ✐ ✐ ✐ “Volumen1” — 2012
- Page 421 and 422: ✐ ✐ ✐ “Volumen1” — 2012
- Page 423 and 424: ✐ ✐ ✐ “Volumen1” — 2012
✐<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