运算符重载赋值运算符
民生历史 2021-08-24 13:33 字号: 大 中 小
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。 赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的。
下面我们以实例说明如何使用它,代码如下:
#include iostream
using namespace std;
class Internet
{
public:
Internet(char *name,char *url)
{
Internet::name = new char[strlen(name)+1];
Internet::url = new char[strlen(url)+1];
if(name)
{
strcpy(Internet::name,name);
}
if(url)
{
strcpy(Internet::url,url);
}
}
Internet(Internet temp)
{
Internet::name=new char[strlen()+1];
Internet::url=new char[strlen(l)+1];
if(name)
{
strcpy(Internet::name,);
}
if(url)
{
strcpy(Internet::url,l);
}
}
~Internet()
{
delete[] name;
delete[] url;
}
Internet operator =(Internet temp)//赋值运算符重载函数
{
delete[] this-name;
delete[] this-url;
this-name = new char[strlen()+1];
this-url = new char[strlen(l)+1];
if(this-name)
{
strcpy(this-name,);
}
if(this-url)
{
strcpy(this-url,l);
}
return *this;
}
public:
char *name;
char *url;
};
int main()
{
Internet a(\"中国软件开发实验室\",\"\");
Internet b = a;//b对象还不存在,所以调用拷贝构造函数,进行构造处理。
苏武在北海牧羊的外形缺乏粗糙感 lendl;
Internet c(\"美国\",\"\");
b = c;//b对象已经存在,所以系统选择赋值运算符重载函数处理。
lendl;
system(\"pause\");
}
上例代码中的Internet operator =(Internet temp)就是赋值运算符重载函数的定义,内部需要先delete的指针就是涉及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经确定,所以在复制新内容进去之前必须把堆区清除,区域的过大和过小都不好,所以跟在后面重新分配堆区大小,而后进行复制工作。
在类对象还未存在的情况下,赋值过程是通过拷贝构造函数进行构造处理(代码中的Internet b = a;就是这种情况),但当对象已经存在,那么赋值过程就是通过赋值运算符重载函数处理(例子中的b = c;就属于此种情况)。
成都哪白癜风医院好贵州治疗白癜风哪家医院好
西安妇科诊疗医院
-
-
徐嘉余释疑缘何手硬100仰夺冠对自信心有
徐嘉余释疑缘何手硬:100仰夺冠对自信心有提升徐嘉余 资料图...
2020-07-09 | 民生历史
-
-
楼市新政实施近一个月54城成交量环比跌1搭配
楼市新政实施近一个月 54城成交量环比跌12%来自中原集团研究...
2020-05-31 | 民生历史
-
-
中国至少需要8个一线城市专家更多城市涨房搭配
中国至少需要8个一线城市?专家:更多城市涨房价如果真有必...
2020-05-31 | 民生历史
-
-
张常宁世锦赛有小队员的感觉现在心里有底了搭配
张常宁:世锦赛有小队员的感觉 现在心里有底了张常宁虽然已...
2020-05-30 | 民生历史
-
-
曼城大哥扎心自白伤病就像失败一样也怀疑自搭配
曼城大哥扎心自白:伤病就像失败一样 也怀疑自己孔帕尼还在...
2020-05-29 | 民生历史
-
-
为美好而来想客户之所想急客户之所急搭配
为美好而来,想客户之所想,急客户之所急为美好而来,想客户...
2020-05-28 | 民生历史