我是靠谱客的博主 开心高跟鞋,最近开发中收集的这篇文章主要介绍C++重载操作符新发现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天在看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++重载操作符新发现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部