C++使用构造函数进行类型转换

本文详细介绍了C++中对象的转换过程,包括显式转换和隐式转换,并通过实例展示了如何使用explicit关键字来控制对象的转换行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以把数字或者字符串当做对象赋值给另一个对象,这样在对该赋值表达式进行计算时,首先要对数字或字符串进行类型转换,同时判断该类的构造函数的参数是否类型匹配,假如匹配,则调用该类的构造函数创建一个临时对象,接着将该临时对象赋值给操作符左边的对象,最后调用析构函数删除临时对象。

对象的转换通常分为两种:显式转换和隐式转换,如果不希望对象隐式转换,可以在相应的构造函数前加explicit关键字关闭隐式转换。

1、数字作为转换对象

class MyClass
{
public:
	MyClass(int i){a = i;}
	MyClass(){}
	~MyClass(){}
private:
	int a;
};
int main()
{
	//隐式转换
	//如果带参构造函数声明为explicit MyClass(int i),那么这种转换将失败
	MyClass m = 200;

	//显式转换
	//如果带参构造函数声明为explicit MyClass(int i),那么只能使用这种显式转换
	m = MyClass(300);
	return 0;
}


2、字符串作为对象转换
class MyClass
{
public:
	explicit MyClass(char *p){::strcpy_s(str, p);}
	MyClass(){}
	~MyClass(){}
private:
	char str[20];
};
int main()
{
	//由于关闭了隐式转换,所以此方式编译不过
	//MyClass m = "Helloworld";

	//可以使用显式转换
	MyClass m;
	m = MyClass("abcdef");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯洁码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值