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
*thistermina desreferenciandothisa una cadena en lugar de unaPerson, ¿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);