首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++操作符重载有关问题

2012-06-12 
C++操作符重载问题各位好:T& operator*(){ assert(m_pI ! NULL) return *m_pI }T** operator&() { ass

C++操作符重载问题
各位好: 
T& operator*() { assert(m_pI != NULL) ; return *m_pI ;} 
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;} 
T* operator->() { assert(m_pI != NULL) ; return m_pI ;} 
我知道这3句话是模板的操作符重载, 
那为什么第一句话的T后面跟了一个&号呢? 
第二句话的T后面跟了两个*号呢? 
第三局话的T后面跟了一个*号呢? 

和后面的成员指针变量有关系,或者说指针的操作符重载就是这种固定的格式? 
有哪个高手能帮忙解答么?谢谢。分不多,尽量给。 


[解决办法]

C/C++ code
T& operator*()  { assert(m_pI != NULL) ; return *m_pI ;} //获取一个指针的内容。返回的是一个T对*m_pI 的引用,所以要加一个&T** operator&() { assert(m_pI == NULL) ; return &m_pI ;} //m_pI 是一个指针,而要返回的是&m_PI,就是该指针的本身,所以要用二级指针接受T* operator->() { assert(m_pI != NULL) ; return m_pI ;} //返回的是指针
[解决办法]
1. 解引用,返回智能指针对象的引用,如果不加& 变成返回值了,不拷贝构造,不会获取原对象
2. 取地址,指针的地址当然是二级指针了
3. 比方说可以这样用 Class Test t(pI);
t->func();
直接调用指针函数

热点排行