例えば、
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?
}
}
*this
がthis
をstring
ではなくPerson
に逆参照することになった場合、逆参照として*
の使用を維持する回避策はありますかクラス外の演算子?
*
の使用をあきらめずに、*this
をオーバーロードできなければ、かなりの障害になります。
_
*this
_がthis
をPerson
ではなく文字列に逆参照することになった場合、クラス外の逆参照演算子として_*
_の使用を維持する回避策はありますか?
いいえ。_*this
_は、機能に応じて_Person&
_または_Person const&
_になります。オーバーロードは、Person
オブジェクトへのポインタではなく、Person
オブジェクトに適用されます。 this
は、Person
オブジェクトへのポインタです。
使用する場合:
_ Person p;
auto v = *p;
_
次に、_operator*
_オーバーロードが呼び出されます。
this
を使用して_operator*
_オーバーロードを呼び出すには、this->operator*()
または_**this
_を使用する必要があります。
オーバーロードされた*
演算子を呼び出すには、クラスオブジェクトへのポインタではなく、クラスのオブジェクトが必要です。
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.
this
ポインタの場合も同じです。 this
ポインタを使用して* operator
を呼び出すには、次の2回間接参照する必要があります。
std::string str = *(*this);