自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++基礎(chǔ)之重載賦值運(yùn)算符

開發(fā) 后端
本文介紹的是C++中的重載運(yùn)算符,希望對(duì)你有幫助,一起來看。

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

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

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

  1. 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ù)來使用。

 

  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<<month<<\' \'<<da<<\",\"<<yr<<endl;  
  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類加入了一個(gè)重載運(yùn)算符函數(shù),這個(gè)程序和上面的一個(gè)程序是相同的。賦值運(yùn)算符函數(shù)首先取得所需的數(shù)據(jù),然后用delete把原來的month指針?biāo)加玫膬?nèi)存返還給堆。接著,如果源對(duì)象的month指針已經(jīng)初始化過,就用new運(yùn)算符為對(duì)象重新分配內(nèi)存,并把源對(duì)象的month字符串拷貝給接受方。

重載的Date類賦值運(yùn)算符函數(shù)的***個(gè)語句比較了源對(duì)象的地址和this指針。這個(gè)操作取保對(duì)象不會(huì)自己給自己賦值。

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

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-08-12 15:02:49

C#賦值運(yùn)算符簡單賦值運(yùn)算符

2011-07-15 10:08:11

C++運(yùn)算符重載

2009-08-12 15:20:18

C#賦值運(yùn)算符復(fù)合賦值運(yùn)算符

2020-09-30 14:04:25

C++運(yùn)算符重載

2009-08-12 10:47:03

C#運(yùn)算符重載

2024-01-26 16:37:47

C++運(yùn)算符開發(fā)

2009-09-04 13:18:10

C#允許運(yùn)算符重載

2009-08-12 10:27:12

C#運(yùn)算符重載運(yùn)算符重載實(shí)例

2009-08-14 10:16:57

C#運(yùn)算符重載

2009-08-12 10:56:47

C#運(yùn)算符重載C#運(yùn)算符重載實(shí)例

2009-08-11 15:51:08

C#運(yùn)算符算術(shù)運(yùn)算符

2020-08-10 10:20:15

流插入運(yùn)算符語言

2009-08-12 12:46:11

C#運(yùn)算符重載

2021-12-15 10:25:57

C++運(yùn)算符重載

2025-02-24 11:16:20

2009-08-12 10:37:13

C#運(yùn)算符重載

2010-03-26 12:54:27

Python嵌入C++

2021-12-16 10:40:11

C++運(yùn)算符重載

2009-08-12 11:20:51

C#運(yùn)算符重載

2022-09-19 08:10:37

運(yùn)算符函數(shù)語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)