C++箭头操作符重载

箭头操作符,一般都有左右两部分:a->b;(其中,b可以是函数或者成员;)

如何开始:由a开始,分下面两种情况

1、a是指针,那么就是我们熟悉的,指向我们a类型的成员数据或函数“b”到这里,就结束了!

2、a是对象,那么a必须有成员函数"operator->"(否则会报错)。那么就调用a的operator->函数。由于operator->返回的可能是指针,也可能是对象,那么就又进入了下一轮递归:是指针还是对象,走1或2,如此递归。

如何结束:不管a是指针或者对象,最终都是走到指针结束(当然,写错了也走不下去)。

下面是我写的一个例子,有助于理解!


[java]  view plain copy
  1. #include <iostream>  
  2. #include <stdlib.h>  
  3.   
  4. using namespace std;  
  5.   
  6. class D  
  7. {  
  8. public :  
  9.     void Print(){cout<<"I am in class D!"<<endl;}  
  10. };  
  11.   
  12. class C  
  13. {  
  14. public :  
  15.     void Print(){cout<<"I am in class C!"<<endl;}  
  16.     D* operator->(){return &m_d;}  
  17. private :  
  18.     D m_d;  
  19. };  
  20.   
  21. class B  
  22. {  
  23. public :  
  24.     void Print(){cout<<"I am in B!"<<endl;}  
  25.     C &operator ->(){return m_c;}  
  26. private :  
  27.     C m_c;  
  28. };  
  29.   
  30. class A  
  31. {  
  32. public :  
  33.     void Print(){cout<<"I am in A!"<<endl;}  
  34.     C *operator ->(){return &m_c;}  
  35. private :  
  36.     C m_c;  
  37. };      
  38.   
  39.   
  40.   
  41. int main(int argc, char *argv[])  
  42. {  
  43.     A a;  
  44.     a->Print();                  //"I am in class C!";  
  45.     a->operator->()->Print();    //"I am in class D!"  
  46.     B b;  
  47.     b->Print();                  //"I am in class D!"  
  48.   
  49.     system("PAUSE");      
  50.     return 0;  
  51. }  

如上代码:

1、a->Print();    那么,首先,a是对象,而且有operator->,调用之,返回C*,是个指针。那么,接下来就是调用函数Print,找到对应的C的成员函数。

2、a->operator->()->Print(); 同上,a调用“->”返回的C*,是个指针;那么接下来就是调用C的成员函数。后面是个operator->(),正好是C的一个成员函数。C的operator->返回的是D*,是个指针,那么再调用对应的D的成员函数——Print(); 即“a->operator->()->Print()”中的operator->()需要看成一个C的成员函数(正好返回D*,可以调用箭头“->”)就好理解了。

3、b->Print();   b是对象,调用operator->返回C对象,那么需要再次递归——C是对象,调用operator->返回D*,那么就是指针,可以走向结束:调用对应的函数Print。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值