类的自动类型转换和强制类型转换

36 篇文章 1 订阅

某种类型转换为类类型

定义

接受一个参数的构造函数可用来将与该参数相同的类型转换为类类型,如:
Stonewt(double lbs);
因此,可以这样编写代码:

Stonewt myCat;
myCat=19.6;	//使用Stonewt(double)将19.6转换为Stonewt类型

这里,使用构造函数Stonewt(double)创建一个临时的Stonewt对象,并将19.6作为初始化值,然后将其复制到myCat中。这种隐式转换是自动进行的,不需要进行强制类型转换。

多个参数的构造函数

只有接受一个参数的构造函数才能作为转换函数。除非给其他参数提供默认值。如:
Stonewt(int stn, double lbs = 0);

explicit关键字

将构造函数用作自动类型转换函数可能会带来意想不到的问题,explicit关键字用于屏蔽这种特性。
如声明时:explicit Stonewt(double lbs);
这将关闭自动的隐式转换,但仍然可以进行显式的强制类型转换:

Stonewt myCat;
myCat=19.6;				//不可以
myCat=Stonewt(19.6);	//可以
myCat=(Stonewt) 19.6;	//可以
使用构造函数进行自动类型转换的情形:
  1. 将Stonewt对象初始化为double值时
  2. 将double值赋给Stonewt对象时
  3. 将double值传递给接受Stonewt参数的函数时
  4. 返回值被声明为Stonewt的函数试图返回double值时

类类型转换为其他类型

转换函数是用户定义的强制类型转换,可以像使用强制类型转换那样使用它们。

  • 转换函数必须是类方法
  • 转换函数不能指定返回类型
  • 转换函数不能有参数

例如,转换为double类型的函数原型如下:
operator double();
double指出了要转换成的类型,因此不需要指定返回类型,但在函数定义中必须返回转换后的值;转换函数是类方法意味着:它需要通过类对象来调用,从而告知函数要转换的值,因此不需要参数。

class Stonewt
{
private:
	int stone;
	double pounds;
public:
	...
	operator int() const;
	operator double() const;
};
...
Stonewt::operator int() const
{
	return int (pounds+0.5);
}
Stonewt::operator double() const
{
	return pounds;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值