C++语法基础--重载operator->箭头操作符

来源:互联网 发布:工作沟通软件 编辑:程序博客网 时间:2024/05/16 19:21
格式:
 class B
   {
      public:
          <type>  operator->();
          <type>  fn();
   };
   
   B b;//或者B *b;

   b->fn();


 

   *如果b是某一类类型的指针,则这个语句使用内置成员访问操作符箭头的语义;

  *  如果b是某一个类类型的对像或引用,则查找这个类的重载的成员操作符箭头  

  *返回类型必须是一个类类型的指针,或者是定义了自己的箭头操作符的类类型对象。

  *如果返回值是另一个类的对象或引用,则递归调用该过程,直到返回的是指针类型或语句错误




eg:
 #include <iostream>
using namespace std;




class A
{
public:
void f()
{
cout<<"A::f()"<<endl;
}




};


class B
{
  public:
void f()
{
cout<<"B::f()"<<endl;
}
A* operator->()
{
return &a;
}


private:
A a;
};




class C
{
  public:
void f()
{
cout<<"C::f()"<<endl;
}
B& operator->()
{
return b;
}


private:
B b;
};




class D
{
public:
void f()
{
cout<<"D::f()"<<endl;
}
C* operator->()
{
return &c;
}

private:
C c;


};




int main()
{

D d;
d->f();   //输出C::f(),因为d是对象且重载了operator->所以返回C*,然后是正常的指针调用
D *d1=new D;
d1->f(); //输出D::f(), 因为d1是指针,所以直接是正常的指针调用
C c;

c->f();  //输出A::f(),因为c是对象且重载了operator->所以返回B&,而B重载了operator->,

             //所以再返回A*,最后是正常的指针调用



return 0;
}

   

运行结果: