文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>常见错误24: 晦涩难懂的operator-> ----读书笔记《c++ gotchas》...

常见错误24: 晦涩难懂的operator-> ----读书笔记《c++ gotchas》...

时间:2010-08-07  来源:lzueclipse

内建的operator->是二元的,左操作数是一个指针,右操作数是一个class成员的名字。

而重载版本的operator->则是一元的!

class Ptr {

public:

    Ptr(T *init);

    T *operator->();

    //…

private:

    T *tp_;

};

T *Ptr::operator->() {

    if(today() == TUESDAY)

        abort();

    else

        return tp_;

}

对重载版本的operator->的调用,必须返回一个可以用operator->访问其成员的对象。//你不想见到Ptr p(new T); p->;

Ptr p(new T);

p->f();//表示p.operator->()->f();

重载版本的operator->必须返回支持成员访问操作的“某物”。此“某物”并非一定要是个内建的指针。它也可以

是一个重载了operator->的class的对象。

class AugPtr {

public:

    AugPtr(T *init):p_(init); {}

    Ptr &operator-> () ;

    //…

private:

    Ptr p_;

};

Ptr &AugPtr::operator –> () {

    if(today() == FRIDAY)

        coutf()

请注意,operator->的调用序列的触发(activation)总是包含operator->之定义的对象静态决定,而且该调用序列

总是终结于返回指向class对象的内建指针的调用。

举个例子:

对AugPtr调用operator->总是触发以下调用序列,

先是调用AugPtr::operator->,

接着调用Ptr::operator->,

再接着调用T*类型内建指针上的Ptr::operator->。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载