结合例子更加直观:
class InterClass
{
};
class OuterClass
{
public:
OuterClass(const InterClass& interClass) // 单参数构造函数,注意没有加explicit
: m_data(interClass)
{
}
OuterClass(const OuterClass& outer)
: m_data(outer.m_data)
{
}
operator InterClass() // 隐式类型转换操作符,将OutClass对象转换成InterClass
{
return m_data;
}
private:
InterClass m_data;
};
void TestImplicit(InterClass interClass)
{
}
int main()
{
InterClass inter; // 1
OuterClass outer1(inter); // 2
OuterClass Outer3 = inter; // 3 存在InterClass->OutClass隐式转换
TestImplicit(Outer3); // 4 存在OutClass->InterClass隐式转换
return 0;
}
类中存在两种隐式类型操作符:
单参数构造函数
如OutClass::OuterClass(const InterClass& interClass)。
在第3行中,需要先将inter装换成OuterClass对象,然后调用OutClass的拷贝构造函数,这里调用的就是OutClass的构造函数。
如果不希望单参数构造函数用作隐式类型转换,可以将其声明为explicit。
自定义的operator type()操作符
如OutClass的operator InterClass () 。
在第4行中,函数参数需要的时InterClass对象,给出的是OutClass对象,编译器调用OutClass的operator InterClass()将其装换成InterClass。
需要注意的是 自定义的隐式类型转换操作符的格式:
operator type ()
没有返回值, 没有参数