C++运算符重载赋值运算符

2016-02-19 20:21 10 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐C++运算符重载赋值运算符,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】


    自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注重的是,它与拷贝构造函数与析构函数一样,要注重深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,假如没有指定默认的赋值运算符重载函数, !-- frame contents -- !-- /frame contents -- 那么系统将会自动提供一个赋值运算符重载函数。
  
    赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的。
  
    下面我们以实例说明如何使用它,代码如下:
  //程序作者:管宁 
  //站点: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() 
          { 
              delete[] name; 
              delete[] url; 
          } 
          Internet& operator =(Internet &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对象还不存在,所以调用拷贝构造函数,进行构造处理。 
  
       coutb.nameendlb.urlendl; 
      Internet c("美国在线","www.aol.com"); 
      b = c;//b对象已经存在,所以系统选择赋值运算符重载函数处理。 
      coutb.nameendlb.urlendl; 
      system("pause"); 
  }  上例代码中的Internet& operator =(Internet &temp)就是赋值运算符重载函数的定义,内部需要先delete的指针就是涉及深拷贝问题的地方,由于b对象已经构造过,name和url指针的范围已经确定,所以在复制新内容进去之前必须把堆区清除,区域的过大和过小都不好,所以跟在后面重新分配堆区大小,而后进行复制工作。
  
  在类对象还未存在的情况下,赋值过程是通过拷贝构造函数进行构造处理(代码中的Internet b = a;就是这种情况),但当对象已经存在,那么赋值过程就是通过赋值运算符重载函数处理(例子中的b = c;就属于此种情况)。 更多内容请看C/C++技术专题专题,或

来源:http://www.tulaoshi.com/n/20160219/1623457.html

延伸阅读
       运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观。 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的。 例子如下: C++ 代码  ...
标签: Web开发
JavaScript中new运算符是创建一个新对象。使用方法: new constructor[(arguments)] 其中constructor是必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。 arguments是可选项。任意传递给新对象构造函数的参数。 JavaScript中new运算符说明 new 运算符执行下面的任务: 创建一个没有成员的对象。 为那个对象调用构造函数...
标签: Web开发
typeof 运算符是 返回一个用来表示表达式的数据类型的字符串。 使用方法: typeof[()expression[]] ; 其中 expression 参数是需要查找类型信息的任意表达式。 JavaScript中typeof运算符说明 typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined." typ...
标签: Web开发
今天看一个JS的脚本,发现里面有一句话是这样子写的 var obj = document.getElementById("btn1") || document.getElementById("btn2"); 我觉得这个很奇怪,去查了一下||符号的意思,官方的说法是,逻辑或运算,我理解的应该是返回TRUE或FALSE吧,可以神奇的是JAVSCRIPT居然把可以找到的对象返了回来,我做了个试验,在页面上放一个按...
标签: Web开发
JavaScript中减法运算符(-)是从一个表达式的值中减去另一个表达式的值,只有一个表达式时取其相反数。使用方法: 语法 1 result = number1 - number2 语法 2 -number 其中result是任何数值变量。 number是任何数值表达式。 number1是任何数值表达式。 number2任何数值表达式。 在语法 1 中,- 运算符是算术减法运算符,用来获得两个数值...

经验教程

741

收藏

32
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部