usar significado punteros puntero operadores operador new lenguaje flecha direccion desreferenciar declarar cuando como apuntadores c++ pointers operator-overloading this dereference

c++ - significado - Cuando el operador de desreferencia(*) está sobrecargado, ¿el uso de*está afectado?



operadores de direccion en lenguaje c (2)

Por ejemplo,

class Person{ string name; public: T& operator*(){ return name; } bool operator==(const Person &rhs){ return this->name == rhs.name; } bool operator!=(const Person &rhs){ return !(*this == rhs); // Will *this be the string name or the Person? } }

Si *this termina desreferenciando this a una string lugar de una Person , ¿hay alguna solución que mantenga el uso de * como un operador de eliminación de referencias fuera de la clase?

Sería un gran obstáculo si no pudiera sobrecargar * sin renunciar al uso de *this .


Si *this termina desreferenciando this a una cadena en lugar de una Person , ¿hay alguna solución que mantenga el uso de * como un operador de eliminación de referencias fuera de la clase?

No. *this será Person& / Person const& dependiendo de la función. La sobrecarga se aplica a los objetos Person , no a los objetos Person . this es un puntero a un objeto Person .

Si utiliza:

Person p; auto v = *p;

Entonces, se llama a la sobrecarga del operator* .

Para llamar a la sobrecarga del operator* usando this , tendrá que usar this->operator*() o **this .


Necesita un objeto de la clase en lugar del puntero al objeto de clase para invocar al operador * sobrecargado.

Person *ptr = new Person; Person p1 = *ptr; // does not invoke * operator but returns the object pointed by ptr string str = *p1 // invokes the overloaded operator as it is called on an object.

Lo mismo es el caso con this puntero. Para invocar al * operator con this puntero, tendrá que eliminar la referencia dos veces:

std::string str = *(*this);