C++运算符重载转换运算符(一)

2014-11-24 13:16:25 · 作者: · 浏览: 16
  为什么需要转换运算符?
  我们大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。

 转换运算符的生命方式比较特别,方法如下:

   operator 类名();

   转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值

  下面我看一个例子,看看它是如何工作的:

 C++ 代码

//例1

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;

class Test
{
public:
Test(int a = 0)
{
cout<<this<<":"<<"载入构造函数!"< Test::a = a;
}
Test(Test &temp)
{
cout<<"载入拷贝构造函数!"< Test::a = temp.a;
}
~Test()
{
cout<<this<<":"<<"载入析构函数!"<<this->a< cin.get();
}
operator int()//转换运算符
{
cout<<this<<":"<<"载入转换运算符函数!"<<this->a< return Test::a;
}
public:
int a;
};
int main()
{
Test b(99);
cout<<"b的内存地址"<<&b< cout<<(int)b<//强转换
system("pause");
}


  在例子中我们利用转换运算符将Test类的对象强转换成了int类型并输出,注意观察转换运算符函数的运行状态,发现并没有产生临时对象,证明了它与普通函数并不相同,虽然它带有return语句。

  在很多情况下,类的强转换运算符还可以作为类对象加运算重载函数使用,尽管他们的意义并不相同,下面的例子,就是利用转换运算符,将两个类对象转换成int后,相加并创建临时类对象,后再赋给另一个对象。

代码如下

 C++ 代码

//例2

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;

class Test
{
public:
Test(int a = 0)
{
cout<<this<<":"<<"载入构造函数!"< Test::a = a;
}
Test(Test &temp)
{
cout<<"载入拷贝构造函数!"< Test::a = temp.a;
}
~Test()
{
cout<<this<<":"<<"载入析构函数!"<<this->a< cin.get();
}
operator int()
<script type="text/java script">
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)
您对本文章有什么意见或着疑问吗?请到 论坛讨论您的关注和建议是我们前行的参考和动力
上一篇: 对C++递增(增量)运算符重载的思考
下一篇: C++运算符重载赋值运算符
相关文章
<script type="text/java script">BAIDU_CLB_fillSlot("182716");
<script type="text/java script">BAIDU_CLB_fillSlot("517916");
图文推荐
<iframe src="http://www.2cto.com/uapi.php tid=12683&catid=339&title=Qysr1MvL47f71tjU2Nequ7vUy8vjt/s=&forward=http://www.2cto.com/kf/200609/12683.html" width="100%" height="100%" id="comment_iframe" name="comment_iframe" frameborder="0" scrolling="no">
<script type="text/java script">BAIDU_CLB_fillSl