關於C++中的繼承和過載的區別
阿新 • • 發佈:2018-10-31
C++中的很多特性光從概念上的話,很難做區分。或者說,概念讓人容易模糊,比如說函式過載和函式繼承。
先說過載,過載分為操作符過載和函式名過載,其中,操作符過載就是對運算操作符的原有功能進行自定義設定。比如+運算子,一般只用作對數字的相加。但是,從在運算子之後,可以實現物件的相加處理。要對運算子進行過載,一般格式為:函式型別 operator 函式名稱(形參列表){}; operator就是過載操作符。
對於運算子過載,這個是比較好辨識的,但是對於函式過載的話,往往和介面繼承之間很容易引起混淆。其實呢,在它們的英文名稱中,更加容易引發誤會。過載的英文是overload,而繼承的則是overwrite。這個就是它們之間的區別。overwriter用來解釋繼承其實是很好的,就是有覆蓋、重寫的含義。
如何做區分?函式過載並不會修改掉原函式的介面和功能,而是會新增一個相同的函式名稱,而返回值或形參型別不同的函式。而繼承呢,則是會改寫掉原函式介面的功能,屬於覆蓋掉原函式的功能。而overload,屬於新增的一個介面,其實是對原函式進行功能擴充套件的一種。
也就是說,過載和繼承之間沒有什麼關係,這個概念也主要是因為在java中,對過載直接稱為overload,而對繼承則是overwrite。所以兩者的差別引發大家的誤會。