日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++操作符重載實際操作方法解析

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

十年的高明網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整高明建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“高明網(wǎng)站設計”,“高明網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

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

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

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

A:操作符重載實現(xiàn)為類成員函數(shù)

重載的操作符在類體中被聲明,聲明方式如同普通成員函數(shù)一樣,只不過他的名字包含關鍵字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++操作符重載實現(xiàn)方式如下:

 
 
 
  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!”

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

考慮如下的if語句:

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

是否回正確執(zhí)行呢?

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

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

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

 
 
 
  1. /*實現(xiàn)下標操作符*/  
  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

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

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

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

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

在類的外部,不能訪問該類私有數(shù)據(jù),所以,要把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)/*兩個對象分別代表左右操作數(shù)*/   
  14. cout<<"ok"

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

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

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

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

D:操作符重載為友元函數(shù)方式

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

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

 
 
 
  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:"
  17. }  
  18. int main()  
  19. {  
  20. person rose;  
  21. person jack;  
  22. rose.age=18;  
  23. jack.age=23;  
  24. cout
  25. cout

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

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

②不能為內(nèi)置數(shù)據(jù)類型定義其他的操作符。

③預定義的操作符優(yōu)先級不能被改變。

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

四、prefix and postfix

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

 
 
 
  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. marry= tom++;  
  38. return 0;  

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


網(wǎng)頁題目:C++操作符重載實際操作方法解析
網(wǎng)站地址:http://www.5511xx.com/article/dpcspjg.html