日期:2011-03-22 13:55:00 来源:本站整理
<b>C++运算符重载赋值运算符</b>[VC/C++编程]
本文“<b>C++运算符重载赋值运算符</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用近似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情形下,假如没有指定默许的赋值运算符重载函数,那么系统将会自动供应一个赋值运算符重载函数.
赋值运算符重载函数的定义与别的运算符重载函数的定义是差不多的.
下面我们以实例阐明若何利用它,代码以下:
//程序作者:管宁
//站点:www.cndev-lab.com
//全部稿件均有版权,如要转载,请务必闻名出处和作者
#include<iostream>
usingnamespacestd;
classInternet
{
public:
Internet(char*name,char*url)
{
Internet::name=newchar[strlen(name)+1];
Internet::url=newchar[strlen(url)+1];
if(name)
{
strcpy(Internet::name,name);
}
if(url)
{
strcpy(Internet::url,url);
}
}
Internet(Internet&temp)
{
Internet::name=newchar[strlen(temp.name)+1];
Internet::url=newchar[strlen(temp.url)+1];
if(name)
{
strcpy(Internet::name,temp.name);
}
if(url)
{
strcpy(Internet::url,temp.url);
}
}
~Internet()
{
delete[]name;
delete[]url;
}
Internet&operator=(Internet&temp)//赋值运算符重载函数
{
delete[]this->name;
delete[]this->url;
this->name=newchar[strlen(temp.name)+1];
this->url=newchar[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;
};
intmain()
{
Interneta("中国软件开辟实行室","www.cndev-lab.com");
Internetb=a;//b对象还不存在,所以调用拷贝构造函数,举行构造处理.
cout<<b.name<<endl<<b.url<<endl;
Internetc("美国在线","www.aol.com");
b=c;//b对象已经存在,所以系统挑选赋值运算符重载函数处理.
cout<<b.name<<endl<<b.url<<endl;
system("pause");
}
上例代码中的Internet& operator =(Internet &temp)就是赋值运算符重载函数的定义,内部需求先delete的指针就是触及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经肯定,所以在复制新内容进去之前必须把堆区排除,区域的过大和太小都不好,所以跟在背面重新分配堆区大小,此后举行复制工作.
在类对象还未存在的情形下,赋值历程是通过拷贝构造函数举行构造处理(代码中的Internet b = a;就是这种情形),但当对象已经存在,那么赋值历程就是通过赋值运算符重载函数处理(例子中的b = c;就属于此种情形).
以上是“<b>C++运算符重载赋值运算符</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论