operator 运算符 系列

1一般有点长,解释operator 和conversion 类型转换

http://wenku.baidu.com/link?url=j2oVfFbRNPcfcmmq70Pp283o_OJ8QhQyamzeJLTyekbh3XE6hSgqwfWaLFdy_R3H6DASY-Xnxp8qbClzK9yC7zqdTzfn6kb4R4QluvLCR57


微软 conversion的原解释

http://msdn.microsoft.com/zh-cn/library/Vstudio/5s5sk305(v=vs.100).aspx

conversion另一例:complex举例

http://baike.baidu.com/link?url=VED2bkLIq675Xzjp3Zq_DgOQAhZ1Gd6BZWafsvHefKRfpe58-ERkTeXL0a6heD33lDe0Y1hc76GsSSjPpuqf8a




2





3

http://zhidao.baidu.com/link?url=inloGEubDDpjWKvXpz_1LSli-y1BFCVB0hAsJnnuMsSULeuRyai8rP8yYmGGXH0jEjmjdE-RWMluexr-FjPaGq


在一个模板类中有这样一个运算符重载:
 template<typename T>
class XXX
{
....
 operator T()const {}
...
}
 请问这个重载的是T这个运算符  那么他怎么使用呢?
 
这是类型转换运算符,只要你把XXX对象隐式或者显式转换为T对象时,它自动被调用





---------------------






4     重载选择决定参数的几个条件

c++类的隐式转换与强制转换重载详解

http://www.jb51.net/article/41334.htm      ****(重点讲解看下)


http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422461e1c35befc603f4344959e2d3956b21f0baca36d2c761e27b798c98a4cddafd7756fde2823016f913112c468aedc3623d621e04d98aa0e90b1e742e7b9a6d7c85523dd23056df1f79c2a7003bd6ce71541f4d0995f612807bb9d27148c4e075f882230a131fcf7411d10f186ca2c3c&p=aa7ac837ce9212a05abd9b7e0c1d97&newp=917fd51cce934eaf59e6d32d02149e231610db2151d3db52&user=baidu&fm=sc&query=%CA%B2%C3%B4%C7%E9%BF%F6%B2%C5%BB%E1%D2%FE%CA%BD%D7%AA%BB%BB&qid=&p1=6





5   

百度整章,很长,运算符的重载

http://wenku.baidu.com/link?url=j2oVfFbRNPcfcmmq70Pp283o_OJ8QhQyamzeJLTyekbh3XE6hSgqwfWaLFdy_R3H6DASY-Xnxp8qbClzK9yC7zqdTzfn6kb4R4QluvLCR57




6

http://www.jb51.net/article/41334.htm

class A 
{
int a; 
public:
A(){ }; 
A(int _a) { a = _a; }; 
operator int() { return a; } 
};




int main()
{
A a(10); 
//A a2 = (int)(int)a; 


A a2 = a; // 默认拷贝  没调用属于上面的函数
//A a2=(int)a ;//这时候调用的就是operator int(){return a;}


return 0;
}




终结结论:

转换函数
转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
复制代码 代码如下:
   class<类型说明符1>
    {
     public:
      operator<类型说明符2>();
      …
    }


这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。下面通过一个例子说明转换函数的功能。


详细出处参考:http://www.jb51.net/article/41334.htm


另一例:解释了if()时对类的处理是调用强制类型转换来判断的:

operator overloading

C++可能通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示 

class A { 
public: 
   operator   B* () { return this->b_;}  
   operator const   B* () {return this->b_;}    

operator   B& () {return *this->b_;} 

private:    B* b_; 

};  
A a;


当if(a),编译时,其中它转换成if(a.operator B*()),其实也就是判断 if(a.b_)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值