运算符重载赋值运算符物业
民生法规 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)
4日 {
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;就属于此种情况)。
济南白癜风医院韶关治白癜风哪里最好
吃什么药物可以缓解痛经
-
-
科尔格林赛后微笑相拥再大的仇打火箭就忘
科尔格林赛后微笑相拥! 再大的仇打火箭就忘科尔格林放下恩...
2020-08-13 | 民生法规
-
-
青海省冰壶队开始冰上训练精准打击目标明确
青海省冰壶队开始冰上训练 精准打击 目标明确根据省体育局...
2020-08-12 | 民生法规
-
-
海南迎来冬季旅游旺季邮轮游免税游会奖游受搭配
海南迎来冬季旅游旺季 邮轮游免税游会奖游受捧“听说海南开...
2020-06-06 | 民生法规
-
-
白雪皑皑着夏装陕西鳌山光猪滑勇敢者挑战冰搭配
白雪皑皑着夏装 陕西鳌山光猪滑勇敢者挑战冰雪由陕西太白鳌...
2020-06-02 | 民生法规
-
-
曝浓眉本赛季不会被雪藏他此前曾差点申诉搭配
曝浓眉本赛季不会被雪藏!他此前曾差点申诉直播吧2月8日讯...
2020-06-02 | 民生法规
-
-
凯尔特人官方曝欧文面部骨折或缺席明天比赛搭配
凯尔特人官方曝欧文面部骨折 或缺席明天比赛欧文受伤画面北...
2020-05-31 | 民生法规