为什么需要转换运算符?
大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能。
转换运算符的生命方式比较特别,方法如下:
operator 类名();
转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值。
下面我看一个例子,看看它是如何工作的:
//例1
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include<iostream>
usingnamespacestd;
classTest
{
public:
Test(inta=0)
{
cout<<this<<":"<<"载入构造函数!"<<a<<endl;
Test::a=a;
}
Test(Test&temp)
{
cout<<"载入拷贝构造函数!"<<endl;
Test::a=temp.a;
}
~Test()
{
cout<<this<<":"<<"载入析构函数!"<<this->a<<endl;
cin.get();
}
operatorint()//转换运算符
{
cout<<this<<":"<<"载入转换运算符函数!"<<this->a<<endl;
returnTest::a;
}
public:
inta;
};
intmain()
{
Testb(99);
cout<<"b的内存地址"<<&b<<endl;
cout<<(int)b<<endl;//强转换
system("pause");
}
在例子中我们利用转换运算符将Test类的对象强转换成了int类型并输出,注意观察转换运算符函数的运行状态,发现并没有产生临时对象,证明了它与普通函数并不相同,虽然它带有return语句。
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!