運算符重載的設計意義大嗎?
正常使用運算符重載可以是程序更簡潔,但是濫用之,則困之,濫用會是程序晦澀難懂!
1、從開發的角度而言,運算符重載的存在是為了提高開發效率,增加代碼的可復用性,很多時候反而是簡化了問題,具體實現被復雜化,但是暴露的接口得到了簡化,使對象之間可以做運算操作的,如+-*/。
2、C++強大的原因之一是支持泛型編程。泛型編程使得算法可以獨立于數據類型存在。自定義的數據類型通過操作符重載具有了和內建類型同樣的使用接口,然后C++的模板加持下,你的算法可以利用這種接口一致性,實現泛化,實現算法的通用化。
3、除了提高寫代碼的效率,也往往降低了代碼維護的成本,更容易減少bug,提高代碼質量,實現低耦合。
01 運算符重載的需求
C++ 預定義的運算符,只能用于基本數據類型的運算:整型、實型、字符型、邏輯型等等,且不能用于對象的運算。但是我們有時候又很需要在對象之間能用運算符,那么這時我們就要重載運算符,使得運算符能用于對象之間的運算。
比如,在數學上,兩個復數可以直接進行+、-等運算,但在C++中,直接將+或-用于復數對象是不允許的。有時會希望,讓對象也能通過運算符進行運算。這樣代碼就更簡潔,也容易理解。
02 運算符重載的形式
運算符重載的實質就是函數重載,可以重載為普通函數,也可以重載為成員函數。運算符重載的基本形式如下:
返回值類型 operator 運算符(形參表)
{
...
}
03可重載運算符/不可重載運算符
1、下面是可重載的運算符列表:
雙目算術運算符 + (加),-(減),*(乘),/(除),% (取模)
關系運算符 ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
邏輯運算符 ||(邏輯或),&&(邏輯與),!(邏輯非)
單目運算符 + (正),-(負),*(指針),&(取地址)
自增自減運算符 ++(自增),--(自減)
位運算符 | (按位或),& (按位與),~(按位取反),^(按位異或),,<< (左移),>>(右移)
賦值運算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空間申請與釋放 new, delete, new[ ] , delete[]
其他運算符 ()(函數調用),->(成員訪問),,(逗號),[](下標)
2、下面是不可重載的運算符列表:
? .:成員訪問運算符
? .*, ->*:成員指針訪問運算符
? :::域運算符
? sizeof:長度運算符
? ?::條件運算符
? #: 預處理符號