挑战30天C 入门极限:C 运算符重载赋值运算符

文章作者 100test 发表时间 2007:03:10 17:12:55
来源 100Test.Com百考试题网


自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。

  赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的。

  下面我们以实例说明如何使用它,代码如下:

 C 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#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(temp.name) 1].
Internet::url=new char[strlen(temp.url) 1].
if(name)
{
strcpy(Internet::name,temp.name).
}
if(url)
{
strcpy(Internet::url,temp.url).
}
}
~Internet()
{
0delete[] name.
0delete[] url.
}
Internet&. operator =(Internet &.temp)//赋值运算符重载函数
{
0delete[] this->name.
0delete[] this->url.
this->name = new char[strlen(temp.name) 1].
this->url = new char[strlen(temp.url) 1].
if(this->name)
{
strcpy(this->name,temp.name).
}
if(this->url)
{
strcpy(this->url,temp.url).
}
return *this.
}
public:
char *name.
char *url.
}.
int main()
{
Internet a("中国软件开发实验室","www.cndev-lab.com").
Internet b = a.//b对象还不存在,所以调用拷贝构造函数,进行构造处理。
cout< Internet c("美国在线","www.aol.com").
b = c.//b对象已经存在,所以系统选择赋值运算符重载函数处理。
cout< system("pause").
}


  上例代码中的Internet&. operator =(Internet &.temp)就是赋值运算符重载函数的定义,内部需要先0delete的指针就是涉及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经确定,所以在复制新内容进去之前必须把堆区清除,区域的过大和过小都不好,所以跟在后面重新分配堆区大小,而后进行复制工作。

相关文章


挑战30天C 入门极限:C 的iostream标准库介绍以及对左移与右移运算符的重载1
1999年9月全国计算机等级考试二级C语言试卷(含答案)
挑战30天C 入门极限:C 运算符重载赋值运算符
2000年4月全国计算机等级考试二级C语言试卷(含答案)
2000年9月全国计算机等级考试二级C语言试卷(含答案)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛