her*_*ero 5 c++ operator-overloading
我看到了这段代码,但我无法理解它的作用:
inline S* O::operator->() const
{
return ses; //ses is a private member of Type S*
}
Run Code Online (Sandbox Code Playgroud)
那么如果我用的话会发生什么->?
sha*_*oth 11
现在,如果你有
O object;
object->whatever()
Run Code Online (Sandbox Code Playgroud)
首先operator->将调用重载,它将返回ses存储在对象内部,然后operator->(内置的情况下S*)将再次为返回的指针调用.
所以
object->whatever();
Run Code Online (Sandbox Code Playgroud)
相当于伪代码:
object.ses->whatever();
Run Code Online (Sandbox Code Playgroud)
后者将是当然不可能的,因为O::ses是private-这就是为什么我把它称为伪代码.
有了这样的重载,你可以在指针周围创建一个包装器 - 这种包装器通常称为智能指针.
你有一个 O 类的实例吗?
obj->func()
Run Code Online (Sandbox Code Playgroud)
然后operator->返回ses,然后使用返回的指针调用func()。
完整示例:
struct S
{
void func() {}
};
class O
{
public:
inline S* operator->() const;
private:
S* ses;
};
inline S* O::operator->() const
{
return ses;
}
int main()
{
O object;
object->func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)