当前位置:七道奇文章资讯编程技术VC/C++编程
日期: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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .