重载 - > c ++中的operator

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::sesprivate-这就是为什么我把它称为伪代码.

有了这样的重载,你可以在指针周围创建一个包装器 - 这种包装器通常称为智能指针.


Edd*_*onk 2

你有一个 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)

  • @luiscubal:实际上拥有私有虚拟是一项很好的技术(在流媒体库中广泛使用)。但它并不总是合适的,如果您只想让一个类重写纯虚方法,则无需将其设为私有,但如果您希望基类在虚调用之前做一些工作,那么它很有用。说它应该受到保护或私有就太过分了,这只是一种可以使用的技术。 (2认同)