03.07 C++運算符重載的設計意義大嗎?


我覺得不那麼重要吧,運算符重載只是讓代碼好看一些,不用運算符可以用函數啊。不過作為高級語言,特別對於入門新手就很在乎這些語法。怎麼說呢,對比其他語言,java C#都有這個,C++想要被更多人使用,那也是最好要有吧,多一點競爭力。



談極品tanjp


正常使用運算符重載可以是程序更簡潔,但是濫用之,則困之,濫用會是程序晦澀難懂!

1、從開發的角度而言,運算符重載的存在是為了提高開發效率,增加代碼的可複用性,很多時候反而是簡化了問題,具體實現被複雜化,但是暴露的接口得到了簡化,使對象之間可以做運算操作的,如+-*/。

2、C++強大的原因之一是支持泛型編程。泛型編程使得算法可以獨立於數據類型存在。自定義的數據類型通過操作符重載具有了和內建類型同樣的使用接口,然後C++的模板加持下,你的算法可以利用這種接口一致性,實現泛化,實現算法的通用化。

3、除了提高寫代碼的效率,也往往降低了代碼維護的成本,更容易減少bug,提高代碼質量,實現低耦合。

01 運算符重載的需求

C++ 預定義的運算符,只能用於基本數據類型的運算:整型、實型、字符型、邏輯型等等,且不能用於對象的運算。但是我們有時候又很需要在對象之間能用運算符,那麼這時我們就要重載運算符,使得運算符能用於對象之間的運算。

比如,在數學上,兩個複數可以直接進行+、-等運算,但在C++中,直接將+或-用於複數對象是不允許的。有時會希望,讓對象也能通過運算符進行運算。這樣代碼就更簡潔,也容易理解。

02 運算符重載的形式

運算符重載的實質就是函數重載,可以重載為普通函數,也可以重載為成員函數。運算符重載的基本形式如下:

返回值類型 operator 運算符(形參表)

{

...

}

03可重載運算符/不可重載運算符

1、下面是可重載的運算符列表:

雙目算術運算符\t+ (加),-(減),*(乘),/(除),% (取模)

關係運算符\t==(等於),!= (不等於),< (小於),> (大於>,<=(小於等於),>=(大於等於)

邏輯運算符\t||(邏輯或),&&(邏輯與),!(邏輯非)

單目運算符\t+ (正),-(負),*(指針),&(取地址)

自增自減運算符\t++(自增),--(自減)

位運算符\t| (按位或),& (按位與),~(按位取反),^(按位異或),,<< (左移),>>(右移)

賦值運算符\t=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=

空間申請與釋放\tnew, delete, new[ ] , delete[]

其他運算符\t()(函數調用),->(成員訪問),,(逗號),[](下標)

2、下面是不可重載的運算符列表:

•\t.:成員訪問運算符

•\t.*, ->*:成員指針訪問運算符

•\t:::域運算符

•\tsizeof:長度運算符

•\t?::條件運算符

•\t#: 預處理符號




程序生人


有很大的生產效率意義。在設計上不是必須的,如果沒有,通過代碼也可以實現,如兩個類相加,通過代碼可以把需要相加的成員(通常不會限制公開性)加起來。如果類設計有重載加法,就會效率高很多,直接使用,且不需要太關注類細節,但同樣需要關注類相加的含義說明


zlifes


意義比較大,它是為了讓代碼封裝行和易用性的一種保障

舉個簡單例子,如何把一個對象用cout打印到控制檯?如果沒有重載操作符,會很麻煩

AI算法工程師,歡迎拍磚


CV知識點


很大,使得傳統運算符在擴展數據類型(對象)可以繼續使用但可以重寫其業務邏輯


分享到:


相關文章: