C++重载操作符新发现

来源:互联网 发布:问道手游刷道挂机软件 编辑:程序博客网 时间:2024/06/05 02:42

今天在看MFC源码是碰到这样的形式:

AFX_INLINE operator TYPE*(){ return GetData(); }AFX_INLINE TYPE* operator->(){ return GetData(); }

重载*和->操作符,由于很长时间没看C++ PRIMER,很多东西都已经忘记,顺手拿起旁边的这本宝典。关于这两个操作符的重载,描述的和上面的代码不一致。

自己写了点测试代码来分析一下,结果确实有两种方式:

class Screen{  public:  int n;  };  class ScreenPtr{  public:  ScreenPtr(Screen &src) : ptr(&src) { k = m = 20; }  #if 0  Screen& operator *(){ return *ptr; }  #else  operator Screen*(){ return ptr; }  #endif  Screen* operator->(){ return ptr; }  int k;  Screen *ptr;  int m;  };  void main()  {  Screen scr;  scr.n = 10;  ScreenPtr ps(scr);  int j = (*ps).n;j = ps->n;Screen *pScr = ps;}  

第一种形式:

Screen& operator *(){ return *ptr; } 
只适应
int j = (*ps).n;
这种情况下的调用。

在这样的代码编写方式下就有问题了:

Screen *pScr = ps;

第二种方式更为通用,可以兼容两种情况:

operator Screen*(){ return ptr; } 

原创粉丝点击