日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
C++基礎(chǔ)之重載賦值運(yùn)算符

重載賦值運(yùn)算符

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),江孜網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:江孜等地區(qū)。江孜做網(wǎng)站價(jià)格咨詢:13518219792

為了解決上面的問(wèn)題,我們應(yīng)該寫(xiě)一個(gè)特殊的賦值運(yùn)算符函數(shù)來(lái)處理這類(lèi)問(wèn)題。當(dāng)需要為同一個(gè)類(lèi)的兩個(gè)對(duì)象相互賦值時(shí),就可以重載運(yùn)算符函數(shù)。這個(gè)方法可以解決類(lèi)的賦值和指針的釋放。

下面的程序中,類(lèi)中的賦值函數(shù)用new運(yùn)算符從堆中分配了一個(gè)不同的指針,該指針獲取賦值對(duì)象中相應(yīng)的值,然后拷貝給接受賦值的對(duì)象。
在類(lèi)中重載賦值運(yùn)算符的格式如下:

 
 
  1. void operator = (const Date&) 

后面我們回加以改進(jìn)。目前,重載的運(yùn)算符函數(shù)的返回類(lèi)型為void。它是類(lèi)總的成員函數(shù),在本程序紅,是Date類(lèi)的成員函數(shù)。它的函數(shù)名始終是operator =,參數(shù)也始終是同一個(gè)類(lèi)的對(duì)象的引用。參數(shù)表示的是源對(duì)象,即賦值數(shù)據(jù)的提供者。重載函數(shù)的運(yùn)算符作為目標(biāo)對(duì)象的成員函數(shù)來(lái)使用。

 
 
  1. #include \"iostream.h\"  
  2. #include \"string.h\"  
  3. class Date  
  4. {  
  5. int mo,da,yr;  
  6. char *month;  
  7. public:  
  8. Date(int m=0, int d=0, int y=0);  
  9. ~Date();  
  10. void operator=(const Date&);  
  11. void display() const;  
  12. };  
  13.  
  14. Date::Date(int m, int d, int y)  
  15. {  
  16. static char *mos[] =  
  17. {  
  18. \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",  
  19. \"July\",\"August\",\"September\",\"October\",\"November\",\"December\" 
  20. };  
  21. mo = m; da = d; yr = y;  
  22. if (m != 0)  
  23. {  
  24. month = new char[strlen(mos[m-1])+1];  
  25. strcpy(month, mos[m-1]);  
  26. }  
  27. else month = 0;  
  28. }   
  29. Date::~Date()  
  30. {  
  31. delete [] month;  
  32. }  
  33. void Date::display() const 
  34. {  
  35. if (month!=0) cout<
  36. }  
  37. void Date::operator=(const Date& dt)  
  38. {  
  39. if (this != &dt)   
  40. {  
  41. mo = dt.mo;  
  42. da = dt.da;  
  43. yr = dt.yr;  
  44. delete [] month;  
  45. if (dt.month != 0)  
  46. {  
  47. month = new char [std::strlen(dt.month)+1];  
  48. std::strcpy(month, dt.month);  
  49. }  
  50. else month = 0;  
  51. }  
  52. }  
  53. int main()  
  54. {  
  55. Date birthday(8,11,1979);  
  56. birthday.display();  
  57. Date newday(12,29,2003);  
  58. newday.display();  
  59. newday = birthday;  
  60. newday.display();  
  61. return 0;  

除了為Date類(lèi)加入了一個(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類(lèi)賦值運(yùn)算符函數(shù)的***個(gè)語(yǔ)句比較了源對(duì)象的地址和this指針。這個(gè)操作取保對(duì)象不會(huì)自己給自己賦值。

希望通過(guò)以上內(nèi)容對(duì)重載運(yùn)算的介紹,希望能夠給你帶來(lái)幫助。


分享標(biāo)題:C++基礎(chǔ)之重載賦值運(yùn)算符
本文地址:http://www.dlmjj.cn/article/copjedg.html