第42课.类型转换函数(下)
1.类型转换函数(类类型->普通类型)
a.类型转换函数用于将类对象转换为其他类型
语法规则:(重载)
operator Type ()
{
Type ret;
//...
return ret;
}
b.类型转换函数
1).与转换构造函数具有同等的地位
2).是的便与其有能力将对象转化为其他类型
3).编译器能够隐式的使用类型转换函数
eg:
#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
public:
Value ()
{
}
/* 这里定义类拷贝构造函数,是把Test拷贝为Value对象。当程序执行到下面Value v = t;语句时。
* 程序应该选择转换构造函数还是类型转换函数呢?如果这里没有explicit这里就会报错。当然这里有
* explicit所以这里应该是选择类型转换函数。
*/
explicit Value (Test& t)
{
}
};
class Test
{
int mValue;
public:
Test (int i)
{
mValue = i;
}
int value ()
{
return mValue;
}
operator int ()
{
return mValue;
}
operator Value ()
{
Value ret;
return ret;
}
};
int main()
{
Test t(100);
Value v = t;
int i = t; //与转换构造函数到分析相同。编译器运行到这里时,发现你要将对象赋值给int类型。这显然是
//行不通的。编译器便尝试隐式转换,它发现类中定义了类型转换函数,于是它便调用类型转换函数
//把Test对象转换为int类型赋值。
cout << "i = " << i << endl;
}
2.类型转换函数的优化
a.无法抑制隐式的类型转化函数调用
b.类型转换函数可能与转换构造函数,拷贝函数冲突
c.工程中用Type toType()公有成员变量代替类型转换函数(即不使用类型转换函数,直接定义一个函数。可以防止隐式类型转换)
value toValue ()
{
Value ret;
return ret;
}