精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++操作符重載實際操作方法解析

開發 后端
我們為什么要使用C++操作符重載,又該如何正確的聲明一個C++操作符重載呢?我們今天將會為大家詳細介紹一下這兩個方面的具體知識。

C++編程語言發展至今已經成為了開發領域中一個重要的應用語言。其中有很多比較高深的內容還值得我們在實踐中去不斷的探索。在這里我們就先從對C++操作符重載的應用方式的了解來進一步解讀這一編程語言。#t#

一、為什么使用C++操作符重載?

對于系統的所有操作符,一般情況下,只支持基本數據類型和標準庫中提供的class,對于用戶自己定義的class,如果想支持基本操作,比如比較大小,判斷是否相等,等等,則需要用戶自己來定義關于這個操作符的具體實現。比如,判斷兩個人是否一樣大,我們默認的規則是按照其年齡來比較,所以,在設計person 這個class的時候,我們需要考慮操作符==,而且,根據剛才的分析,比較的依據應該是age。那么為什么叫重載呢?這是因為,在編譯器實現的時候,已經為我們提供了這個操作符的基本數據類型實現版本,但是現在他的操作數變成了用戶定義的數據類型class,所以,需要用戶自己來提供該參數版本的實現。

二、如何聲明一個C++操作符重載?

A:操作符重載實現為類成員函數

重載的操作符在類體中被聲明,聲明方式如同普通成員函數一樣,只不過他的名字包含關鍵字operator,以及緊跟其后的一個c++預定義的操作符。可以用如下的方式來聲明一個預定義的==操作符:

  1. class person{  
  2. private:  
  3. int age;  
  4.  public:  
  5.  person(int a){  
  6. this->aage=a;  
  7. }  
  8. inline bool operator ==(const person &ps) const;  
  9. }; 

C++操作符重載實現方式如下:

  1. inline bool person::operator==(const person &ps) const  
  2. { if (this->age==ps.age)  
  3.  return true;  
  4. return false;  

調用方式如下:

  1.  #include  
  2. using namespace std;  
  3. int main()  
  4. { person p1(10);  
  5. person p2(20);  
  6. if(p1==p2) cout<<”the age is equal!”<return 0;   

這里,因為operator ==是class person的一個成員函數,所以對象p1,p2都可以調用該函數,上面的if語句中,相當于p1調用函數==,把p2作為該函數的一個參數傳遞給該函數,從而實現了兩個對象的比較。

考慮如下的if語句:

  1. if(10==p1) cout<<”the age is equal!”< 

是否回正確執行呢?

答案是不會的,因為只有左操作數是該類類型的對象的時,才會考慮作為類成員重載操作符。因為10不是person類型的對象,所以,不能調用classperson的操作符==。
考慮如下if語句:

  1. if(person(10)==person(11))  
  2.  cout<<"ok"< 

是否能夠正確執行呢?答案是可以,因為操作符兩邊均是無名對象。重載的操作符并不要求兩個操作數的類型一定相同。例如:我們可以為class person定義下標操作符,以表示該person和電話的對應關系:

  1. /*實現下標操作符*/  
  2. #include  
  3. #include  
  4. using namespace std;  
  5. class person  
  6. { private:  
  7.  int tel;  
  8. public:  
  9. int & operator[](string const & nm)   
  10. {  
  11.  return tel;  
  12. }  
  13. int GetTel()  
  14. {  
  15. return tel;  
  16. }  
  17. };  
  18. int main()  
  19. {  
  20. person p1;  
  21. p1["suo"]=110;  
  22. person p2;  
  23. p2["rose"]=120;  
  24. cout<cout<return 0;  

對于重載為成員函數方式的操作符,隱式的this指針被作為該函數的第一個參數,來代表左操作數。

B:C++操作符重載實現為非類成員函數(全局函數)

對于全局重載操作符,代表左操作數的參數必須被顯式指定。例如:

  1. #include  
  2. #include  
  3. using namespace std;  
  4. class person  
  5. {  
  6. public:  
  7.  int age;  
  8. public:  
  9. }; 

在類的外部,不能訪問該類私有數據,所以,要把age設置為public

  1. bool operator==(person const &p1 ,person const & p2)  
  2. {  
  3.  if(p1.age==p2.age)  
  4.  return true;  
  5.  return false;  
  6. }  
  7. int main()  
  8. {  
  9. person rose;  
  10. person jack;  
  11. rose.age=18;  
  12. jack.age=23;  
  13. if(rose==jack)/*兩個對象分別代表左右操作數*/   
  14. cout<<"ok"<return 0;  

C:如何決定把一個操作符重載為類成員函數還是全局名字空間的成員呢?

①如果一個重載操作符是類成員,那么只有當與他一起使用的左操作數是該類的對象時,該操作符才會被調用。如果該操作符的左操作數必須是其他的類型,則操作符必須被重載為全局名字空間的成員。

②C++要求賦值=,下標[],調用(), 和成員指向-> 操作符必須被定義為類成員操作符。任何把這些操作符定義為名字空間成員的定義都會被標記為編譯時刻錯誤。

③如果有一個操作數是類類型如string類的情形那么對于對稱操作符比如等于操作符最好定義為全局名字空間成員。

D:操作符重載為友元函數方式

如果把C++操作符重載為友元函數方式,則在該函數的內部,可以直接訪問授權類的私有數據成員,這是友元函數方式和全局名字空間方式的主要區別。

E:怎樣判斷一個非類成員的操作符應該是類的友元還是應該使用成員訪問函數呢?一般來說,類的實現者應該盡量使得名字空間函數和訪問類內部表示的操作符的數目最小化。如果已經提供了訪問成員函數并且它們具有等同的效率,那么最好是使用這些成員函數。但是如果類的實現者決定不為該類的某些私有成員提供訪問成員函數而且名字空間操作符需要引用這些私有成員才能完成,它們的操作那么就必須使用友元機制。例如:

  1. #include  
  2. #include  
  3. using namespace std;  
  4. class person{  
  5. public:   
  6.  int age;  
  7. public:  
  8. };   
  9. bool operator==(person const &p1 ,person const & p2)  
  10. {  
  11. if(p1.age==p2.age) return true;  
  12. return false;  
  13. }  
  14. ostream operator<<(ostream &os,person const &p)  
  15. {  
  16. os<<"the person age is:"<return os;  
  17. }  
  18. int main()  
  19. {  
  20. person rose;  
  21. person jack;  
  22. rose.age=18;  
  23. jack.age=23;  
  24. cout</*call ostream operator<<(ostream &os,person const &p) */  
  25. cout<return 0;  

三、C++操作符重載的設計

①類的設計者不能聲明一個沒有預定義的重載操作符。

②不能為內置數據類型定義其他的操作符。

③預定義的操作符優先級不能被改變。

④一個類最終需要提供哪些操作符,是由該類預期的用途來決定的。

四、prefix and postfix

為區分后置操作符與前置操作符的聲明,重載的遞增和遞減后置操作符的聲明有一個額外的int 類型的參數。這里不需要給出參數名,因為它沒有被用在操作符定義中。額外的整型參數對于后置操作符的用戶是透明的,編譯器為它提供了缺省值因而該參數也可以被忽略。例如:

  1. #include  
  2. #include  
  3. using namespace std;  
  4. class person  
  5. {  
  6. private:  
  7.  int age;  
  8. public:  
  9.  person(int a)  
  10.  {  
  11.  aage=a;  
  12.  }  
  13. person const operator++()/*prefix ++ */  
  14. {  
  15.  this->age++;  
  16.  return *this;  
  17. }  
  18. person const operator++(int a)/*postfix ++ */  
  19. {  
  20.  person temp(1);  
  21.  temp=*this;  
  22.  this->age++;  
  23.  return temp;  
  24. }  
  25. int GetAge()  
  26. {  
  27.  return age;  
  28. }  
  29. };  
  30. int main()  
  31. {  
  32. person rose(10);  
  33. person jack(20);  
  34. person marry(22);  
  35. person tom(30);  
  36. jack=++rose;  
  37. marrytom++;  
  38. return 0;  

以上就是對C++操作符重載的相關介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-30 15:53:28

Silverlight

2010-02-05 10:30:02

C++操作符重載

2009-08-18 18:06:54

C#操作符重載

2010-01-28 11:16:28

C++操作符

2010-01-27 11:00:17

C++操作符

2010-01-07 10:46:27

VB.NET Sock

2010-01-04 16:50:04

Silverlight

2010-09-30 10:41:29

2010-08-06 11:21:45

IBM DB2 數據復

2009-08-18 17:42:12

C#操作符重載

2009-08-18 17:55:20

C#操作符重載

2010-01-19 13:32:20

C++操作符

2010-05-31 18:16:48

MySQL數據庫備份

2009-07-14 18:34:22

Jython操作符重載

2010-01-21 09:53:23

C++操作符

2010-07-27 13:16:50

DB2使用所有內存

2010-04-19 16:28:04

Oracle導出

2010-03-24 13:04:12

Python嵌入

2010-03-05 13:48:24

Python for

2010-02-03 16:56:20

C++自定義類
點贊
收藏

51CTO技術棧公眾號

香蕉视频禁止18| 99电影网电视剧在线观看| 微拍福利一区二区| 国产日本亚洲| 成年人在线观看网站| 欧美精品国产白浆久久久久| 91国偷自产一区二区使用方法| 中文字幕99| 天天操天天干天天操| 麻豆成人在线观看| 91高清视频免费观看| 精品伦精品一区二区三区视频密桃| 高潮久久久久久久久久久久久久 | 最新中文字幕在线播放| 国产精品激情偷乱一区二区∴| 国产一区不卡在线观看| 亚洲一区二区视频在线播放| 亚洲免费一区二区| 欧美日韩xxx| 天堂网av2018| 美日韩中文字幕| 精品99一区二区三区| 国产探花在线看| 美女100%一区| 五月婷婷久久丁香| 欧美黄色免费网址| 国产一二区在线| 国产精品青草综合久久久久99| 九九99玖玖| 免费激情视频网站| 国产经典欧美精品| 91在线看www| 91丨porny丨在线中文 | 日韩欧美中文视频| 四虎精品永久免费| 精品婷婷伊人一区三区三| 日本黄色三级大片| 亚洲优女在线| 欧美性精品220| 国内自拍在线观看| 狠狠躁少妇一区二区三区| 亚洲综合久久久久| 国内自拍中文字幕| 午夜小视频福利在线观看| 最新国产精品久久精品| 小说区视频区图片区| 韩国av网站在线| 综合色天天鬼久久鬼色| 99热一区二区三区| 一区二区三区伦理| 亚洲在线成人精品| 国产亚洲黄色片| 国产理论在线| 黑丝美女久久久| 1024av视频| 免费成人直播| 欧美自拍偷拍一区| 天天干天天综合| 久久青草视频| 日韩精品资源二区在线| 亚洲精品无码一区二区| 精品视频高潮| 亚洲精品网站在线播放gif| 亚洲精品乱码久久久久久久久久久久| 国产欧美高清视频在线| 中文国产成人精品| 国产精品 欧美激情| 在线观看视频日韩| 日本高清视频精品| 中国黄色一级视频| 国产乱人伦精品一区二区在线观看| 99免费在线观看视频| 亚洲av永久纯肉无码精品动漫| 成人av在线资源网站| 麻豆av一区二区| √新版天堂资源在线资源| 自拍偷在线精品自拍偷无码专区| 欧洲精品在线播放| 欧美电影免费观看网站| 555夜色666亚洲国产免| 日韩电影在线播放| 免费一级在线观看| 国产精品美女一区二区| www亚洲国产| 国内老司机av在线| 一本色道综合亚洲| 精品综合久久久久| 懂色av一区二区| 亚洲乱码一区二区| 精品国产国产综合精品| 夜夜嗨一区二区| 国产一区深夜福利| 天天操天天操天天操| 国产精品国产三级国产普通话蜜臀 | 中文字幕在线播出| 不卡影院免费观看| 亚洲精品国产一区| 国产欧洲在线| 欧美一区二区三区公司| 中文字幕5566| 欧美日韩国产综合网| 国产精品444| 亚洲国产精彩视频| 国产精品国产a| 国产主播在线看| 国产日韩在线观看视频| 亚洲最大在线视频| 日韩av黄色片| 国产精品影视网| 午夜精品福利一区二区| 僵尸再翻生在线观看| 91麻豆精品国产无毒不卡在线观看 | 国产精品网友自拍| 黄色片视频在线免费观看| 日本精品在线观看| 日韩在线观看网站| 日韩欧美国产另类| 91免费观看在线| 人妻激情另类乱人伦人妻| 欧美成人家庭影院| 亚洲日本aⅴ片在线观看香蕉| 日本三级片在线观看| 国产一区二区三区黄视频| 午夜久久资源| 欧美aa视频| 亚洲精品久久久一区二区三区 | 日韩一级大片在线| 538精品在线视频| 久久成人精品无人区| 奇米精品在线| 粉嫩一区二区三区| 亚洲美女自拍视频| 欧美在线观看不卡| 97se亚洲国产综合在线| 国产日韩av网站| 视频二区欧美| 欧美日韩成人免费| 成人h动漫精品一区二区无码| 亚洲欧洲www| 久国产精品视频| 婷婷成人基地| 91日本视频在线| 成人短视频在线观看| 欧美美女一区二区在线观看| 很污很黄的网站| 国产最新精品免费| 中国一级黄色录像| 日韩中文字幕一区二区高清99| 久久精品国产v日韩v亚洲| 国产尤物在线观看| 一区精品在线播放| 五月天六月丁香| 欧美日韩网址| 国产三区精品| 亚洲午夜天堂| 国产亚洲精品va在线观看| 国产乱码在线观看| 1024成人网色www| 国产精品91av| 99在线|亚洲一区二区| 免费在线观看一区二区| 激情亚洲影院在线观看| 中文字幕在线看视频国产欧美在线看完整| 中文字幕 日韩有码| 国产精品成人一区二区艾草| 成人免费黄色av| 亚洲精品社区| 欧洲视频一区二区三区| 国产精品成人3p一区二区三区| 欧美久久久精品| 外国精品视频在线观看 | 男人天堂综合网| 色综合视频一区二区三区高清| 微拍福利一区二区| 国产精品夜夜爽| 黄色一级片播放| 日韩电影免费网站| 成人动漫在线观看视频| 樱花草涩涩www在线播放| 日韩一区视频在线| 天堂av资源在线| 欧美久久久一区| 日韩欧美中文字幕一区二区| 国产欧美精品国产国产专区| 在线观看你懂的视频| 亚洲一区二区三区高清不卡| 亚洲自拍的二区三区| 高潮按摩久久久久久av免费| 国产精品视频一区二区高潮| 欧美人与牲禽动交com| 亚洲社区在线观看| www.国产免费| 欧美手机在线视频| 精品成人久久久| 成人欧美一区二区三区在线播放| 国产毛片毛片毛片毛片毛片毛片| 麻豆精品一区二区综合av| 日韩国产成人无码av毛片| 欧美日韩中字| 精品高清视频| 精品国产一级| 国产精品www| 多野结衣av一区| 久久久精品一区二区三区| 欧美日韩视频精品二区| 欧美r级在线观看| 中文在线观看av| 色伊人久久综合中文字幕| 青青草国产在线观看| 中文无字幕一区二区三区| 99久久免费看精品国产一区 | 欧美午夜不卡视频| 日韩精品视频播放| 伊人色综合久久天天| 国产人妻大战黑人20p| 成人午夜激情影院| 亚洲丝袜在线观看| 免费在线观看日韩欧美| 92看片淫黄大片一级| 日韩视频二区| 老子影院午夜伦不卡大全| 91精品国产调教在线观看| 四虎永久国产精品| 欧美老女人另类| 久久久久久99| 看全色黄大色大片免费久久久| 91视频99| 日韩精品一区二区三区免费视频| 国产在线观看一区二区三区 | 精品成人佐山爱一区二区| 国产女人爽到高潮a毛片| 欧美丝袜丝交足nylons图片| 97人妻精品视频一区| 欧美综合在线视频| 最好看的日本字幕mv视频大全| 欧美性猛交xxxx富婆| 久久免费视频播放| 亚洲一区二区三区在线播放| 91视频免费在线看| 亚洲精品老司机| 唐朝av高清盛宴| 一区二区三区资源| 国产亚洲成人精品| 午夜av一区二区| 久久国产精品系列| 色综合色综合色综合色综合色综合 | 中文字幕一区二区三区在线视频 | 久久99精品久久久久久久青青日本 | 国产成人8x视频一区二区| 免费观看黄网站| 高清不卡一区二区在线| 亚洲视频天天射| 91在线精品一区二区三区| 成人网站免费观看| 久久久影视传媒| 正在播放国产对白害羞| 亚洲天堂网中文字| 久久久久久av无码免费网站| 亚洲r级在线视频| 日韩在线视频免费播放| 色婷婷av一区二区三区大白胸| 日韩乱码一区二区三区| 欧美丰满一区二区免费视频| 精品国产av一区二区| 亚洲第一网站免费视频| 美女毛片在线看| 精品国产欧美成人夜夜嗨| 色呦呦在线免费观看| 26uuu亚洲伊人春色| 成人在线免费电影网站| 99精品在线直播| 亚洲aa在线| 色爽爽爽爽爽爽爽爽| 99热免费精品在线观看| 国产a级片免费观看| 国精产品一区一区三区mba视频| 久久精品无码专区| 国产欧美在线观看一区| 久久久久亚洲av无码专区体验| 黑人巨大精品欧美一区二区| 国产精品国产三级国产普通话对白| 欧美mv日韩mv亚洲| 3p在线观看| 韩剧1988免费观看全集| 久久91超碰青草在哪里看| 国产免费高清一区| 欧美oldwomenvideos| 无码人妻少妇伦在线电影| 日韩av中文在线观看| 亚洲妇女无套内射精| 国产欧美一区二区精品婷婷 | 99在线视频观看| 日本电影亚洲天堂| 一区二区三区免费在线看| 日日夜夜精品网站| 99国内精品| 樱花草www在线| 久久精品亚洲麻豆av一区二区 | 日本成人在线不卡视频| 97中文字幕在线观看| 国产精品乱码一区二三区小蝌蚪| 日本少妇性生活| 91麻豆精品国产91久久久更新时间 | www欧美在线| 精品国产青草久久久久福利| 日韩大片在线永久免费观看网站| 2019精品视频| 伊人精品综合| 国产精品av免费| 日韩精品午夜视频| 国产精品jizz| 亚洲国产成人porn| 国产aⅴ爽av久久久久成人| 这里只有精品丝袜| 二区三区不卡| 韩国一区二区三区美女美女秀 | 97久久久免费福利网址| 麻豆国产精品| 一区二区在线高清视频| 日韩一区欧美二区| 久久亚洲AV成人无码国产野外| 亚洲综合丝袜美腿| 精品国产av鲁一鲁一区| 久久综合亚洲社区| 亚洲香蕉久久| 一区二区三区观看| 日本不卡视频在线观看| 一区二区三区久久久久| 色呦呦国产精品| 免费人成黄页在线观看忧物| 日本成人精品在线| 欧美猛男同性videos| 欧美日韩在线中文| 97精品国产露脸对白| 中文字幕精品三级久久久 | 蜜桃视频在线观看www社区| 国产成人精品一区二区三区| 色综合综合网| 国产日韩成人内射视频| 久久精品欧美日韩精品| 手机av免费观看| 一本色道久久88综合亚洲精品ⅰ| 男人皇宫亚洲男人2020| 日本在线成人一区二区| 欧美亚洲一区二区三区| 91视频免费观看网站| 91电影在线观看| av中文在线| 91久久国产精品91久久性色| 中文字幕乱码亚洲无线精品一区| 亚洲成人激情小说| 天天综合色天天| 免费黄色片在线观看| 国产精品第三页| 国产韩日影视精品| 永久看看免费大片| 亚洲国产婷婷综合在线精品| 天天色综合久久| 日韩美女免费视频| 欧美成人直播| 性高潮久久久久久| 精品人伦一区二区三区蜜桃网站| 精品福利视频导航大全| 国产欧美日韩专区发布| 欧美在线亚洲综合一区| 黄色网址在线视频| 在线免费观看日韩欧美| 免费av网站在线观看| 国产伦精品一区二区三区视频免费 | av软件在线观看| 精品一区在线播放| 麻豆精品一区二区综合av| 免费看一级一片| 亚洲天堂影视av| 精品国产一区二区三区2021| 日本十八禁视频无遮挡| 欧美激情一区二区三区四区| 国产xxxx孕妇| 人人澡人人澡人人看欧美| 国产精品二区不卡| 亚洲一区二区乱码| 欧美区在线观看| 一个人看的www视频在线免费观看| 一区二区免费电影| 99re免费视频精品全部| 国产又粗又猛又黄| 5278欧美一区二区三区| 亚洲精品一区二区在线看| 亚洲av网址在线| 8v天堂国产在线一区二区| 忘忧草在线日韩www影院| 久久久久亚洲av无码专区喷水| 91网站在线观看视频| 99热这里精品| 国产精品成人aaaaa网站| 激情久久中文字幕| 午夜国产小视频| 亚洲色图欧美制服丝袜另类第一页| 日韩成人在线看| 99sesese|