Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: class_OpenGL en 31 Julio 2016, 02:10 am



Título: (Consulta) Sobre la sobrecarga del operador &
Publicado por: class_OpenGL en 31 Julio 2016, 02:10 am
Hola, muy buenas. Estoy mirando un poco sobre C++, aunque esté centrado en C, por diversión, cuando de repente me fijé en que se podría sobrecargar el operador de & (operador para sacar la dirección de una variable/objeto). Entonces, la duda es, si una clase tiene sobrecargada el operador &, ¿cómo puedo sacar la dirección de esa clase? La única manera que se me ocurre es hacer un método que retorne 'this', pero debería haber otra manera, ¿no?

Código de ejemplo:
Código
  1. #include <iostream>
  2.  
  3. class Foo {
  4. public:
  5. int operator &();
  6. };
  7.  
  8. int main() {
  9. Foo foo;
  10.  
  11. std::cout << &foo << std::endl;
  12.  
  13. return 0;
  14. }
  15.  
  16. int Foo::operator &() {
  17. return 5;
  18. }

La salida, efectivamente será:
Código:
5

Muchas gracias


Título: Re: (Consulta) Sobre la sobrecarga del operador &
Publicado por: ivancea96 en 31 Julio 2016, 04:57 am
El operador & es un operador que solo se debería sobrecargar si es estrictamente necesario. Y si se hace, lo normal es retornar una direcicón.
Puede usarse para saber si se está accediendo a la dirección, o para pasar una dirección de un campo interno, por ejemplo. Pero vamos, que retornar un int u otro objeto es muy poco deseable.

En cualquier caso, es una funcionalidad más. Cada programador le dará el uso que quiera.

A tu pregunta: Cómo obtener la dirección. En vez de sobrecargar el operador & y hacer un getter d ela dirección, haz lo contrario. No sobercargues el operador, y haz una función que retorne el 5.


Título: Re: (Consulta) Sobre la sobrecarga del operador &
Publicado por: class_OpenGL en 31 Julio 2016, 05:06 am
Jaja, eso lo sabía. Lo preguntaba por si algún día me encontraba en la situación de que una librería sobrecargó ese operador, y entonces no pudiera obtener la dirección de memoria del objeto. Pero por lo que veo por tu respuesta, no hay manera... Una lástima :P

Gracias por tu respuesta!


Título: Re: (Consulta) Sobre la sobrecarga del operador &
Publicado por: avesudra en 31 Julio 2016, 13:53 pm
Hola, sí se puede, pero sobrecargar el operador & para tal fin puede llevar a muchas confusiones. En la cabecera <memory> tienes la función genérica addressof (se agregó en C++11 para solucionar el problema que comentáis), que funciona de la misma manera que el operador unario &.

Te dejo la referencia http://en.cppreference.com/w/cpp/memory/addressof (http://en.cppreference.com/w/cpp/memory/addressof)


Título: Re: (Consulta) Sobre la sobrecarga del operador &
Publicado por: class_OpenGL en 31 Julio 2016, 18:39 pm
Ah, vale. Me parecía extraño que no se pudiera sacar la dirección de otra forma. ¡Muchas gracias!