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://i-blog.csdnimg.cn/blog_migrate/a0b83aaaf3a27875d04e538f4135e7ea.png)
Cow c3 = c2;调用的是复制构造函数,
Cow c4;
c4 = c2;先使用默认构造函数,再使用重载的赋值运算符。
03
.delete hobby:
重载的赋值运算符=,c3=c2.c3可能之前里面有数据,如果不删的话,在之后使用new运算符之后将丢失该数据的地址,造成内存的浪费。
04
.return(*this):
为了连续使用重载=,如c1=c2=c3,c1=c2返回一个该类对象,继续调用重载运算符。
本文详细介绍了C++中C风格字符串的赋值操作,包括使用for循环和strcpy_s函数的两种方式,并强调了strlen函数在计算字符串长度时忽略空字符。此外,还讲解了在重载赋值运算符时,如何处理已有数据的内存释放,以及return *this的作用,以确保连续赋值的正确性。
7166

被折叠的 条评论
为什么被折叠?



