c++学习笔记05

本文详细介绍了C++中C风格字符串的赋值操作,包括使用for循环和strcpy_s函数的两种方式,并强调了strlen函数在计算字符串长度时忽略空字符。此外,还讲解了在重载赋值运算符时,如何处理已有数据的内存释放,以及return *this的作用,以确保连续赋值的正确性。

1.

Cow& Cow::operator=(const Cow& c)
{
	if (this == &c)
		return(*this);
	delete hobby;
	//for (int i = 0; i < 20; i++)
		//name[i] = c.name[i];
	strcpy_s(name, 20, c.name);
	int len = strlen(c.hobby);
	 hobby = new char[len + 1];
	strcpy_s(hobby, len+1,c.hobby);
	weight = c.weight;
	return(*this);
}

***字符数组末尾是空字符的是C-风格字符串(C-风格字符串一定是字符数组,字符数组不一定是字符串)string类是C++才有的,C没有。
对于C-风格字符串来说不能直接赋值(String类可以直接赋值),C-风格字符串赋值有两种方式:
第一种:for (int i = 0; i < 20; i++)
name[i] = c.name[i];
第二种:strcpy_s(name, 20, c.name);
strlen()不读取空字符,因此再strcpy时长度要设置为len+1.

](https://img-blog.csdnimg.cn/2021061916282551.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNTY3NjA3,size_16,color_FFFFFF,t_70)

Cow c3 = c2;调用的是复制构造函数,
Cow c4;
c4 = c2;先使用默认构造函数,再使用重载的赋值运算符。

03

.delete hobby:
重载的赋值运算符=,c3=c2.c3可能之前里面有数据,如果不删的话,在之后使用new运算符之后将丢失该数据的地址,造成内存的浪费。

04

.return(*this):
为了连续使用重载=,如c1=c2=c3,c1=c2返回一个该类对象,继续调用重载运算符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值