类的隐式类型转换

结合例子更加直观:

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 ()
没有返回值, 没有参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值