1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      C++運算符重載賦值運算符

      更新時間: 2007-05-25 09:48:31來源: 粵嵌教育瀏覽量:1513


        自定義類的賦值運算符重載函數的作用與內置賦值運算符的作用類似,但是要要注意的是,它與拷貝構造函數與析構函數一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定默認的賦值運算符重載函數,那么系統將會自動提供一個賦值運算符重載函數。

        賦值運算符重載函數的定義與其它運算符重載函數的定義是差不多的。

        下面我們以實例說明如何使用它,代碼如下:
      //程序作者:管寧
      //站點: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對象還不存在,所以調用拷貝構造函數,進行構造處理。
      cout<<b.name<<endl<<b.url<<endl;
      Internet c("美國在線","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;就屬于此種情況)。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 色性国产精品不卡视频 | 一本久久国产精品视频 | 免费国产99久久久香蕉 | 亚洲人成网站在线观看播放动漫 | 中文字幕免费乱码欧美 | 亚洲区一区二区三AV |