C++之------運算符重載
① 什麼是運算符重載?
何為C++的運算符重載呢?
其實就是運算符給它重新賦予新的含義或者多重含義。讓它有另外一種新的功能。
為什麼需要運算符重載?
面向對象中為了實現類的多態性,我們就引用了運算符重載
程序中可以利用“+”、“—” 對整數、單精度、雙精度以及指針進行加法和減法運算等
例如:
1 int a = 1+2; //對整數加
2 double d = 1.0+2.54; //對雙精度加
3 int por[10];
4 int *p = por;
5 p = p- 1; //對指針減1
②運算符重載由來
在計算機的內存中,整數與浮點數的存儲形式是不一樣的,計算機他們的加減運算的處理過程是不同的,
而且指針-1並不是簡單的地址-1而已。在C++裡面,編譯器來處理這些問題,它可以根據表達式兩側的類型來決
定應該如何處理他們的運算,最後決定該執行什麼操作。所以在C++中可以對運算符可以對不同類型進行運算操作。
現實中的問題:復數的運算-------
可能很多童鞋忘了什麼是復數.咋們先來說說什麼是復數(光谷的學到老活到老)
復數是指能寫成如下形式的數a+bi,這裡a和b是實數,i是虛數單位。在復數a+bi中,a稱為復數的實部,b稱
為復數的虛部,i稱為虛數單位。當虛部等於零時,這個復數就是實數;當虛部不等於零時,這個復數稱為虛數,復數的
實部如果等於零,則稱為純虛數。由上可知,復數集包含了實數集,並且是實數集的擴張。 復數是由意大利米蘭學者
卡當在十六世紀首次引入,經過達朗貝爾、棣莫弗、歐拉、高斯等人的工作,此概念逐漸為數學家所接受。(來自:百度百科)
好,來正題:
比如兩個復數:S1=(1+2i) S2=(6+1.2i)
我們在數學裡面進行兩個復數相加S=S1+S2=(7+3.2i) (實部與實部相加,虛部與虛部相加)
在C++裡面我們如何計算呢 ?
所有我們需要用到運算符的重載。
③ 程序中運算符重載格式
重載的運算符函數語法為:
重載運算符的函數一般格式如下:
<返回值類型># operator 運算符名稱 (形參表列)
{
// 對運算符的重載處理
}
operator為關鍵字,專門用於定義重載的運算符函數,#代表要被重載的運算符。如:
Complex operator + (const Complex& a, const Complex& b){ ...... } 該函數可以用來是是實現對兩個Complex對象的加,
比喻下面的例子
復制代碼
1 int main(){
2 Complex a(10, 7), b(3, 5);
3 Complex c= a + b;
4 Complex d = a - b;
5 Complex e = a + b - d;
6 cout << "c="; c.print_complex();
7 cout << "d="; d.print_complex();
8 cout << "e="; e.print_complex();
9 int x=100, y=200, z;
10 z = x + y;
11 cout << "z=" << z;
12 }
復制代碼
使用成員函數來重載Complex的+、-運算符操作
復制代碼
1 #include <iostream>
2 using namespace std;
3 class Complex {
4 private:
5 double rpart, ipart;
6 public:
7 Complex ( ) { rpart=ipart=0.0; }
8 Complex(double rp, double ip){
9 rpart=rp; ipart=ip;
10 }
11 Complex operator +(const Complex &c){
12 Complex temp(rpart+c.rpart, ipart+c.ipart);
13 return temp;
14 }
15
16 Complex operator -(const Complex &c);
17 void print_complex()
18 {
19 cout<< "(" << rpart<<','<<ipart << "i)" <<endl;
20 }
21 };
22 //類外實現operator –函數
23 Complex Complex::operator -(const Complex &c){
24 Complex temp(rpart-c.rpart, ipart-c.ipart);
25 return temp;
26 }