概述
今天在看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; }
最后
以上就是开心高跟鞋为你收集整理的C++重载操作符新发现的全部内容,希望文章能够帮你解决C++重载操作符新发现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复