学习网考试学习资料

Gzu521.com

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

全国计算机等级考试   点击:次   发布时间:2007-1-31   【字体: 】   来源:Gzu521.com
GZU521.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 %26amp;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()
{
delete[] name;
delete[] url;
}
internet%26amp; operator =(internet %26amp;temp)//赋值运算符重载函数
{
delete[] this->name;
delete[] 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%26amp; operator =(internet %26amp;temp)就是赋值运算符重载函数的定义,内部需要先delete的指针就是涉及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经确定,所以在复制新内容进去之前必须把堆区清除,区域的过大和过小都不好,所以跟在后面重新分配堆区大小,而后进行复制工作。

本文共2页:第 [1] [2]下一页

责任编辑:gzu521

IT认证分类
计算机软件水平考试
全国计算机等级考试
思科认证
微软认证
ORACLE/CIW认证
Linux认证
JAVA认证
其它认证
分类推荐信息
更多...
大类最新文章
更多...