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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
十分鐘理解C++中的運算符重載

 在C ++中,我們可以使運算符為用戶定義的類工作。這意味著C ++能夠為運算符提供數(shù)據(jù)類型的特殊含義,這種能力稱為運算符重載。

公司主營業(yè)務(wù):做網(wǎng)站、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出鳳翔免費做網(wǎng)站回饋大家。

例如,我們可以在String之類的類中重載運算符'+',以便僅使用+就可以連接兩個字符串。 算術(shù)運算符可能會重載的其他示例類是復(fù)數(shù),小數(shù),大整數(shù)等。

一個簡單而完整的例子

 
 
 
  1. #include  
  2. using namespace std;  
  3.    
  4. class Complex {  
  5. private:  
  6.     int real, imag;  
  7. public:  
  8.     Complex(int r = 0, int i =0)  {real = r;   imag = i;}  
  9.     Complex operator + (Complex const &obj) {  
  10.          Complex res;  
  11.          res.real = real + obj.real;  
  12.          res.imag = imag + obj.imag;  
  13.          return res;  
  14.     }  
  15.     void print() { cout << real << " + i" << imag << endl; }  
  16. };  
  17.    
  18. int main()  
  19. {  
  20.     Complex c1(10, 5), c2(2, 4);  
  21.     Complex c3 = c1 + c2;  
  22.     c3.print();  
  23. }  

 

操作員功能和普通功能有什么區(qū)別?

操作員功能與普通功能相同。唯一的區(qū)別是,運算符的名稱始終是運算符關(guān)鍵字,后跟運算符的符號,并且在使用相應(yīng)的運算符時會調(diào)用運算符功能。

以下是全局運算符功能的示例。

 
 
 
  1. #include  
  2. using namespace std;  
  3.    
  4. class Complex {  
  5. private:  
  6.     int real, imag;  
  7. public:  
  8.     Complex(int r = 0, int i =0)  {real = r;   imag = i;}  
  9.     void print() { cout << real << " + i" << imag << endl; }  
  10.  
  11. friend Complex operator + (Complex const &, Complex const &);  
  12. };  
  13.    
  14.    
  15. Complex operator + (Complex const &c1, Complex const &c2)  
  16. {  
  17.      return Complex(c1.real + c2.real, c1.imag + c2.imag);  
  18. }  
  19.    
  20.    
  21. int main()  
  22. {  
  23.     Complex c1(10, 5), c2(2, 4);  
  24.     Complex c3 = c1 + c2;  
  25.     c3.print();  
  26.     return 0;  
  27. }  

 

我們可以讓所有運算符超負荷嗎?

除了少數(shù)操作員之外,幾乎所有操作員都可以重載。以下是不能重載的運算符的列表。

為什么不能。(點),::,?:和sizeof是否過載?

請參閱此以獲取Stroustrup自己的答案。

關(guān)于運算符重載的要點

1)為了使運算符重載起作用,至少一個操作數(shù)必須是用戶定義的類對象。

2) 賦值運算符:編譯器會自動為每個類創(chuàng)建一個默認的賦值運算符。默認賦值運算符確實將右側(cè)的所有成員分配到左側(cè),并且在大多數(shù)情況下都可以正常工作(此行為與復(fù)制構(gòu)造函數(shù)相同)。請參閱此了解更多詳情。

3) 轉(zhuǎn)換運算符:我們還可以編寫可用于將一種類型轉(zhuǎn)換為另一種類型的轉(zhuǎn)換運算符。

 
 
 
  1. #include   
  2. using namespace std;  
  3. class Fraction  
  4. {  
  5.     int num, den;  
  6. public:  
  7.     Fraction(int n,  int d) { num = n; den = d; }  
  8.  
  9.     operator float() const {  
  10.         return float(num) / float(den);  
  11.     }  
  12. };  
  13.    
  14. int main() {  
  15.     Fraction f(2, 5);  
  16.     float val = f;  
  17.     cout << val;  
  18.     return 0;  
  19. }  

 

重載的轉(zhuǎn)換運算符必須是成員方法。其他運算符可以是成員方法或全局方法。

4)任何可以用單個參數(shù)調(diào)用的構(gòu)造函數(shù)都可以用作轉(zhuǎn)換構(gòu)造函數(shù),這意味著它也可以用于隱式轉(zhuǎn)換為正在構(gòu)造的類。

 
 
 
  1. #include   
  2. using namespace std;  
  3.    
  4. class Point  
  5. {  
  6. private:  
  7.     int x, y;  
  8. public:  
  9.     Point(int i = 0, int j = 0) {  
  10.         x = i;   y = j;  
  11.     }  
  12.     void print() {  
  13.         cout << endl << " x = " << x << ", y = " << y;  
  14.     }  
  15. };  
  16.    
  17. int main() {  
  18.     Point t(20, 20);  
  19.     t.print();  
  20.     t = 30;    
  21.     t.print();  
  22.     return 0;  

當(dāng)前標(biāo)題:十分鐘理解C++中的運算符重載
本文路徑:http://www.5511xx.com/article/coihssi.html