把我弄混淆的操作符重载

《windows核心编程》里有看到这样一句话:

g_mmf[dwOffset * 1024] = (BYTE) 
               GetDlgItemInt(hWnd, IDC_BYTE, NULL, FALSE);
CMMFSparse g_mmf; g_mmf是个类。把等号两边的内容换成等价的代码就成了:g_mmf[0] = 10;

我的第一感觉就是,类重载了[]操作符,找定义,只找到这一句:
operator PBYTE() const { return((PBYTE) m_pvFile); }

这句奇怪了,查询资料,网友说g_mmf是个数组或是指针。一开始我以为他们说错了呢,后来我知道这是为什么了。

为了以后遇到不在迷惑,现总结一下几种操作符重载。


下面的代码试着调试下就知道每种情况了。

struct STRU {
	int a;
	STRU() : a(1) {}
};

class CTest {
private:
	STRU m_st;
	PVOID m_data;
public:
	//函数操作符;
	STRU operator()(int num) {
		m_st.a += num;
		return m_st;
	}
	
	//一般的重载;
	CTest& operator+=(const CTest& other);
	
	//单参构造;其它类型转CTest类型;
	CTest(STRU st) {
		m_data = malloc(100);
		m_st = st;
	}
	
	//类型转换操作符函数;CTest类型转其它类型;
	operator PBYTE() const { return((PBYTE) m_data); }
};

int _tmain()
{
	STRU st_1;
	st_1.a = 9;
	//单参构造;结构体转CTest类型;
	CTest t = st_1;
	
	//函数操作符;类实例像函数一样用;
	STRU st = t(3);
	st = t(5);
	
	//类型转换操作符函数;CTest转其它类型;
	t[0] = (BYTE)5;
}
按理说最后一句t[0] = (BYTE)5; 写成PBYTE pB = t;; 大家毫无疑问理解,CTest类型转其它类型嘛。

但这样写它确实把t类型转成指向m_data的PBYTE类型了!

所以结合起来,

g_mmf[dwOffset * 1024] = (BYTE) 
               GetDlgItemInt(hWnd, IDC_BYTE, NULL, FALSE);
operator PBYTE() const { return((PBYTE) m_pvFile); }

 就不难理解了,它给g_mmf类的m_pvFile成员的第dwOffget * 1024位置赋值。 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值