第四十二课:类型转换函数(下)---狄泰软件学院

文章来源于狄泰软件学院唐老师C++课程课件

一、类类型是否能够类型转换到普通类型?

#include<iostream>
#include<string>
using namespace std;
class Test
{
	  int mValue;
public:
	Test(int i=0)
	{	
		mValue=i;
	}
	int value()
	{
		return mValue;
	}
};
int main()
{
	Test t;
	int i=(int)t;
	return 0;
}
报错

二、类型转换函数

  1. C++类中可以定义类型转换函数
  2. 类型转换函数用于将类对象转换为其他类型
  3. 语法规则:
operator Type()
{
	Type ret;
	return ret;
}

实例分析:类型转换函数初探

#include<iostream>
#include<string>
using namespace std;
class Test
{
	  int mValue;
public:
	Test(int i=0)
	{	
		mValue=i;
	}
	int value()
	{
		return mValue;
	}
	operator int()
	{
		return mValue;
	}	
};
int main()
{
	Test t(100);
	int i=t;
	cout<<"t.value()="<<t.value()<<endl;
	cout<<"i="<<i<<endl;
	return 0;
}
t.value()=100
i=100

类型转换函数

  1. 与转换构造函数具有同等的地位
  2. 使得编译器有能力将对象转换成其他类型
  3. 编译器能够隐式的使用类型转换函数

编译器会尽力尝试让源码通过编译
Test t(1);
int i=t;
t这个对象为Test类型,怎么可能用于初始化int类型的变量呢,现在就报错吗?不急,先看看有没有类型转换函数。OK发现Test类中定义了operator int (),可以进行转换。

三、类类型之间的相互转换?
类型转换函数VS转换构造函数
实例分析:类类型之间的转换

#include<iostream>
#include<string>
using namespace std;
class Test;
class Value
{
public:
	Value()
	{
	}
	explicit Value(Test& t)
	{
	}
};
class Test
{
	  int mValue;
public:
	Test(int i=0)
	{	
		mValue=i;
	}
	int value()
	{
		return mValue;
	}	
	operator Value()
	{
		Value ret;
		cout<<"operator Value()"<<endl;
		return ret;
	}
};
int main()
{
	Test t(100);
	
//Value类中无转换构造函数Value(Test &)时,operator Value()存在。
//	Value v=t;
	//等价于Value v=t.operator Value();
	
//Value类存在转换构造函数Value(Test &)时,operator Value()不存在。
	Value v=t;
	//等价于Value(t)

//Value类存在转换构造函数Value(Test&)时,operator Value()存在--》报错。解决方法在转换构造函数之前加explicit关键字。
	cout<<"t.value()="<<t.value()<<endl;
	return 0;
}
operator Value()
t.value()=100

  1. 无法抑制隐式的类型转换函数调用
  2. 类型转换函数可能与转换构造函数冲突
  3. 工程中以Type toType()的公有成员代替类型转换
	Value toValue()
	{
		Value ret;
		cout<<"operator Value()"<<endl;
		return ret;
	}

总结:

  1. C++类中可以定义类型转换函数
  2. 类型转换函数用于将类对象转换为其他类型
  3. 类型转换函数与转换构造函数具有同等的地位
  4. 工程中以Type toType()的公有成员代替类型转换函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值