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; } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值