運算子多載-=

來源:互聯網
上載者:User

 #include
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;
};
innt main()
{
Internet a("中國軟體開發實驗室","www.cndev-lab.com");
Internet b = a;//b對象還不存在,所以調用拷貝建構函式,進行構造處理。
cout<< Internet c("美國線上","www.aol.com");
b = c;//b對象已經存在,所以系統選擇賦值運算子多載函數處理。
cout< system("pause");
}

 

  上例代碼中的Internet& operator =(Internet &temp)就是賦值運算子多載函數的定義,內部需要先delete的指標就是涉及深拷貝問題的地方,由於b對象已經構造過,name和url指標的範圍已經確定,所以在複製新內容進去之前必須把堆區清除,地區的過大和過小都不好,所以跟在後面重新分配堆區大小,而後進行複製工作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.