運算符重載是一種形式的C++多態。運算符重載將重載的概念擴展到運算符上,允許賦予C++運算符多種含義。實際上,很多C++運算符已經被重載。eg:將*運算符用於地址,將得到存儲在這個地址中的值,將他用於2個數字時,得到的將是他們的乘積。C++根據操作數的數目和類型來決定采用哪種操作。
C++允許將運算符重載擴展到用戶定義的類型。例如,允許使用+將兩個對象相加。編譯器將根據操作數的數目和類型決定使用加法定義。運算符重載可以使代碼看起來更自然。例如,將2個數組相加是一種常見的運算。通常,需要使用下面這樣的for循環來實現:
( i = ; i < ; i++= sam[i] + janet[i];
但在C++中,可以定義一個表示數組的類,並重載+運算符,於是便有這樣的語句:
total = arr1+arr2;
mytime.h
once MYTIME_H_ Time( Time( h, ~Time( AddMin( AddHr( Reset( h, Time Sum( Time &t); Time + (Time &t);
mytime.cpp
#include #include <iostream> #include Time::Time( hours = minutes = Time::Time( h, hours = minutes = Time::~Time( Time::AddMin( minutes += hours += minutes/ minutes %= Time::AddHr( hours += Time::Reset( h, hours = minutes = std::cout<<hours<<<<<<minutes<<<< Time Time::Sum( Time &t) sum.minutes = minutes + sum.hours = hours + t.hours + sum.minutes/ sum.minutes = sum.minutes % Time Time::+(Time &t) sum.minutes = minutes + sum.hours = hours + t.hours + sum.minutes/ sum.minutes = sum.minutes % }
調用
#include #include #include <iostream> _tmain( argc, _TCHAR* Time coding(, Time fixing(, cout << cout << cout << cout << cout << cout << total = cout << cout << total = coding + cout << cout << }
執行結果
1.sum函數中將參數聲明為引用,可以提高運行效率,節省內存
2.sum函數中,返回值不能是引用。因為sum對象是局部變量,在函數結束時將被刪除,因此引用將指向一個不存在的對象。使用返回類型Time意味著在刪除sum之前構造他的拷貝,調用函數將得到他的拷貝。
C++ Primer Plus 第六版(第11章)