1. 类型转换函数 (类类型 -> 普通类型)
a. 类型转换函数用于将类对象转换为其他类型
语法规则:(重载)
- operator Type ()
- {
- Type ret;
- //...
- return ret;
- }
b. 类型转换函数
?1). 与转换构造函数具有同等的地位
?2). 是的便与其有能力将对象转化为其他类型
?3). 编译器能够隐式的使用类型转换函数
- eg:
- #include
- #include
- 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;
- }
来源: http://www.bubuko.com/infodetail-3304430.html