1.关于赋值运算符的重载
写代码时注意以下几点:
1.函数返回值
要把函数返回值声明为该类型的引用,则才可以连续赋值
2.函数形参
把传入参数的类型声明为常量引用,可提高代码效率,
原因:否则,从形参到实参会调用一次拷贝构造,且在赋值运算符函数内不改变传入对象的状态,所以在传入的引用参数前加const
3.判断传入的参数和当前的对象(*this)是不是同一个对象
若为同一个,一旦释放自身内存,传入参数的内存也被释放了,则找不到需要赋值的内容了
4.分配新内存之前要释放对象自身已有的内存,否则会造成内存泄漏(之后总结)
5在函数结束前返回对象自身的引用(*this)(这样才能连续赋值);
代码如下
CMyString & CMyString::operator=(const CMyString& str)
{
if (this == &str)
{
return *this;
}
delete mpData;
mpData = NULL;
int len = strlen(str.mpData);
mpData = new char[len + 1];
//strcpy(mpData, str.mpData);
for (int i = 0; i <= len; ++i)
{
mpData[i] = str.mpData[i];
}
return *this;
}
2关于输出函数的重载问题(后续再补充)
代码段
friend ostream& operator<< (ostream &out, const CMyString &str)
{
cout << str.mpData << endl;
return out;
}