国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 05:03:44
字體:
來源:轉載
供稿:網友

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

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

  下面我們以實例說明如何使用它,代碼如下:
//程序作者:管寧 
//站點: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;就屬于此種情況)。 更多文章 更多內容請看C/C++技術專題專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新河县| 东乌珠穆沁旗| 莒南县| 中方县| 潍坊市| 开江县| 平乐县| 宿松县| 蒲城县| 连江县| 屏东县| 伊通| 镇江市| 德安县| 当阳市| 边坝县| 广宗县| 调兵山市| 沐川县| 台山市| 新昌县| 玉屏| 叶城县| 龙川县| 临颍县| 大宁县| 葫芦岛市| 岳阳县| 香港 | 兴城市| 五华县| 金沙县| 清苑县| 吉木萨尔县| 广宁县| 富阳市| 潜山县| 儋州市| 江陵县| 张掖市| 射阳县|