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

十分鐘理解C ++中的運(yùn)算符重載

開發(fā) 前端
在C ++中,我們可以使運(yùn)算符為用戶定義的類工作。這意味著C ++能夠?yàn)檫\(yùn)算符提供數(shù)據(jù)類型的特殊含義,這種能力稱為運(yùn)算符重載。

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

[[354257]]

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

一個(gè)簡(jiǎn)單而完整的例子

 

  1. #include<iostream>  
  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ū)別是,運(yùn)算符的名稱始終是運(yùn)算符關(guān)鍵字,后跟運(yùn)算符的符號(hào),并且在使用相應(yīng)的運(yùn)算符時(shí)會(huì)調(diào)用運(yùn)算符功能。

以下是全局運(yùn)算符功能的示例。

 

  1. #include<iostream>  
  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. }  

 

我們可以讓所有運(yùn)算符超負(fù)荷嗎?

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

為什么不能。(點(diǎn)),::,?:和sizeof是否過(guò)載?

請(qǐng)參閱此以獲取Stroustrup自己的答案。

關(guān)于運(yùn)算符重載的要點(diǎn)

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

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

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

 

  1. #include <iostream>  
  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)換運(yùn)算符必須是成員方法。其他運(yùn)算符可以是成員方法或全局方法。

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

 

  1. #include<iostream>   
  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;  

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2019-04-01 14:59:56

負(fù)載均衡服務(wù)器網(wǎng)絡(luò)

2016-06-13 14:07:50

Java動(dòng)態(tài)代理

2020-09-27 14:41:37

C語(yǔ)言編程語(yǔ)言計(jì)算機(jī)

2022-03-23 09:32:38

微服務(wù)容器Kubernetes

2020-12-17 06:48:21

SQLkafkaMySQL

2016-01-04 11:18:00

KubernetesKubernetes概容器技術(shù)

2021-09-07 09:40:20

Spark大數(shù)據(jù)引擎

2022-06-16 07:31:41

Web組件封裝HTML 標(biāo)簽

2024-06-19 09:58:29

2023-04-12 11:18:51

甘特圖前端

2012-07-10 01:22:32

PythonPython教程

2015-09-06 09:22:24

框架搭建快速高效app

2024-05-13 09:28:43

Flink SQL大數(shù)據(jù)

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫(kù)

2023-11-09 14:44:27

Docker鏡像容器

2022-12-27 09:10:38

ChatGPT技術(shù)邏輯

2023-07-15 18:26:51

LinuxABI

2009-10-09 14:45:29

VB程序

2019-09-16 09:14:51

2024-11-07 16:09:53

點(diǎn)贊
收藏

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