0.问题:类类型是否能够类型转换到普通类型?
1.类型转换函数
C++类中可以定义类型转换函数,其作用是将类对象转换为其它类型。如法规则如下:
operator Type ()
{
Type ret;
// ...
return ret;
}
编程说明:类型转换函数的初探
#include <iostream>
#include <string>
using namespace std;
class Test
{
int mValue;
public:
Test()
{
}
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator int () // 类型转换函数
{
int ret = mValue;
return ret;
}
};
int main()
{
Test t(1);
int i = t; // ==> i = t.operator int (); 相当于隐式调用了类型转换函数
cout << "t.value() = " << t.value() << endl;
cout << "i = " << i << endl;
return 0;
}
输出结果:
t.value() = 1
i = 1
- 类型转化函数与转换构造函数具有同等的地位,它使得编译器有能力将对象转化为其它类型,编译器能够隐式的使用类型转换函数。
2. 类与类之间的相互转换
编程说明:类类型之间的转换
#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
int mValue;
public:
Value()
{
}
explicit Value(Test& t)
{
cout << "explicit Value(Test& t) : " << endl;
}
int value()
{
return mValue;
}
};
class Test
{
int mValue;
public:
Test()
{
}
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator Value () // 类型转换函数
{
Value ret;
cout << "operator Value ():" << endl;
return ret;
}
};
int main()
{
Test t1(1);
Test t2(2);
Value v1 = t1; // 隐式调用时通过Test类中的类型转换函数
Value v2 = (Value)t2; // 显示调用时通过Value类中的转换构造函数
return 0;
}
输出结果
operator Value ():
explicit Value(Test& t) :
3. 类型转换函数
- 无法抑制隐式的类型转换函数调用
- 类型转换函数可能与转换构造函数冲突
- 工程中以
Type toType()
的公有成员代替类型转换函数,如int toInt();
4.小结
- C++类中可以定义类型转换函数
- 类型转换函数用于将类对象转换为其它类型
- 类型转换函数与转换构造函数具有同等的地位,编译器都可以隐式的调用,当同时定义了这两个函数,编译器隐式调用时就会报错(编译器无法选择这两个函数用哪一个)
- 工程中以
Type to Type()
的公有成员代替类型转换函数