(Consulta) Sobre la sobrecarga del operador &

Iniciado por class_OpenGL, 31 Julio 2016, 02:10 AM

0 Miembros y 1 Visitante están viendo este tema.

class_OpenGL

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 (cpp) [Seleccionar]
#include <iostream>

class Foo {
public:
int operator &();
};

int main() {
Foo foo;

std::cout << &foo << std::endl;

return 0;
}

int Foo::operator &() {
return 5;
}


La salida, efectivamente será:
5

Muchas gracias

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

ivancea96

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.

class_OpenGL

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!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

avesudra

#3
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
Regístrate en

class_OpenGL

Ah, vale. Me parecía extraño que no se pudiera sacar la dirección de otra forma. ¡Muchas gracias!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL