gpt4 book ai didi

c++ - 重载取消引用运算符

转载 作者:行者123 更新时间:2023-11-30 04:14:41 25 4
gpt4 key购买 nike

noGiven 私有(private)成员 pData

private:
T* pData; // Generic pointer to be stored

下面是*和->的重载实现

T& operator* ()
{
return *pData;
}

T* operator-> ()
{
return pData;
}

我们从 main 中调用相同的方法,如下所示:

void main(){
SP<PERSON> p(new Person("Scott", 25));
p->Display();
}

我无法理解 -> 和“*”运算符重载在这里如何工作?或者更清楚 p->Display(); 将如何解释?

最佳答案

-> 运算符很特殊。当它返回一个对象时,它会自动再次应用。如果它返回另一个对象,它也会再次应用,直到最终返回一个普通指针。这称为链接,普通指针最终被取消引用并且链停止。

p->Display() 因此被解释为:

p->Display(); // Compiler sees this
T* tmp = p.operator->(); // First applied operator-> (the one you provided)
tmp->Display(); // since T* is a pointer itself, operator-> (the built-in one for pointers) is applied

关于c++ - 重载取消引用运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com