轉(zhuǎn)帖|其它|編輯:郝浩|2011-07-19 14:52:37.000|閱讀 372 次
概述:為了解決上面的問(wèn)題,我們應(yīng)該寫一個(gè)特殊的賦值運(yùn)算符函數(shù)來(lái)處理這類問(wèn)題。當(dāng)需要為同一個(gè)類的兩個(gè)對(duì)象相互賦值時(shí),就可以重載運(yùn)算符函數(shù)。這個(gè)方法可以解決類的賦值和指針的釋放。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
為了解決上面的問(wèn)題,我們應(yīng)該寫一個(gè)特殊的賦值運(yùn)算符函數(shù)來(lái)處理這類問(wèn)題。當(dāng)需要為同一個(gè)類的兩個(gè)對(duì)象相互賦值時(shí),就可以重載運(yùn)算符函數(shù)。這個(gè)方法可以解決類的賦值和指針的釋放。
下面的程序中,類中的賦值函數(shù)用new運(yùn)算符從堆中分配了一個(gè)不同的指針,該指針獲取賦值對(duì)象中相應(yīng)的值,然后拷貝給接受賦值的對(duì)象。
在類中重載賦值運(yùn)算符的格式如下:
void operator = (const Date&) 后面我們回加以改進(jìn)。目前,重載的運(yùn)算符函數(shù)的返回類型為void。它是類總的成員函數(shù),在本程序紅,是Date類的成員函數(shù)。它的函數(shù)名始終是operator =,參數(shù)也始終是同一個(gè)類的對(duì)象的引用。參數(shù)表示的是源對(duì)象,即賦值數(shù)據(jù)的提供者。重載函數(shù)的運(yùn)算符作為目標(biāo)對(duì)象的成員函數(shù)來(lái)使用。
#include \"iostream.h\"
#include \"string.h\"
class Date
{
int mo,da,yr;
char *month;
public:
Date(int m=0, int d=0, int y=0);
~Date();
void operator=(const Date &);
void display() const; };
Date::Date(int m, int d, int y)
{
static char *mos[] =
{
\ "January\",\"February\",\"March\",\"April\",\"May\",\"June\",
\ "July\",\"August\",\"September\",\"October\",\"November\",\"December\" };
mo = m; da = d; yr = y;
if (m != 0)
{ month = new char[strlen(mos[m-1])+1];
strcpy(month, mos[m-1]);
}
else month = 0;
}
Date::~Date()
{
delete [] month;
}
void Date::display()
const
{
if (month!=0) cout《month《\' \'《da《\ ",\"《yr《endl;
}
void Date::operator=(const Date & dt)
{
if (this != &dt)
{
mo = dt.mo;
da = dt.da;
yr = dt.yr;
delete [] month;
if (dt.month != 0)
{
month = new char
[std::strlen(dt.month)+1];
std::strcpy(month, dt.month);
}
else month = 0;
}
}
int main()
{
Date birthday(8,11,1979);
birthday.display();
Date newday(12,29,2003);
newday.display();
newday = birthday;
newday.display();
return 0;
}
除了為Date類加入了一個(gè)重載運(yùn)算符函數(shù),這個(gè)程序和上面的一個(gè)程序是相同的。賦值運(yùn)算符函數(shù)首先取得所需的數(shù)據(jù),然后用delete把原來(lái)的month指針?biāo)加玫?內(nèi)存返還給堆。接著,如果源對(duì)象的month指針已經(jīng)初始化過(guò),就用new運(yùn)算符為對(duì)象重新分配內(nèi)存,并把源對(duì)象的month字符串拷貝給接受方。
重載的Date類賦值運(yùn)算符函數(shù)的第一個(gè)語(yǔ)句比較了源對(duì)象的地址和this指針。這個(gè)操作取保對(duì)象不會(huì)自己給自己賦值。
希望通過(guò)以上內(nèi)容對(duì)重載運(yùn)算的介紹,希望能夠給你帶來(lái)幫助。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載