首页 >> 民生历史

运算符重载赋值运算符

民生历史  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;就属于此种情况)。

成都哪白癜风医院好
贵州治疗白癜风哪家医院好
西安妇科诊疗医院
推荐资讯