C++类自动转换

1.当构造函数只接受一个参数时,则该类可以与该参数类型相同的值转换。

看下面这个简单的例子:

class Woo{
private:
	double mm;
public:
	/*explicit*/ Woo(double a);
	Woo() {mm=0;};
	void show();

	//operator double() const;
};

Woo::Woo(double a)
{
	mm = a;
}
 
void Woo::show()
{
	cout << "show function: " << mm << endl;
}
 
/*
Woo::operator double() const
{
	return double(mm);
}
*/

int main()
{
	Woo a;
	a = 13.3;
	a.show();
 
	/*
	Woo a(13.3);
	double b = a;
	cout << b << endl;
	*/
}

运行结果:

zhuanhuan

其实,此处重点还是因为在赋值时,创建了一个该类的临时变量,然后将临时变量赋值给该类变量。

如果想要关闭这个特性,可以使用explicit关键字,只需要在类声明中的构造函数前加上explicit即可,如:

explict Woo(double a);

此时我在VS2008下显示报错:

error C2679: 二进制“=”: 没有找到接受“double”类型的右操作数的运算符(或没有可接受的转换)

2.C++类型转换操作符

在上面,符合条件时,可以将double赋值给一个类类型,那反过来行吗?

可以,不过此时要使用C++的转换操作符函数。

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

转换函数的使用方法:

operator typeName();

typeName是要转换为的类型。

注意以下几点:

①.转换函数必须是类方法。

②.转换函数不能指定返回类型。

③.转换函数不能有参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值