多態是面向對象編程的重要特性,也是C++的一個特性,同樣也是類設計的重要概念。多態可以理解是重載,通俗講就是好比是人格分裂癥——一個身體中有好幾種性格。
默認參數時C++提供的一項新內容,默認參數指的是當函數調用中省略了實參時自動使用的一個值,這樣極大的提高了使用函數的靈活性。默認參數不屬于多態,但筆者認為默認參數也可以提供多態的特性,可以將默認參數理解為一種最簡單的重載,代碼不變而只是修改參數的值。通過函數原型中賦值給參數來設置默認值,由于編譯器通過查看原型來了解函數所使用的參數數目,因此函數原型也必須將可能的默認參數告知程序。
函數重載(多態)是C++在C語言的基礎上新增的功能,默認參數能使用不同數目的參數調用同一個函數,而函數重載能夠使用多個同名的函數。“多態”一詞指的是由多種形式,“函數重載”指的是可以有多個同名的函數,兩個概念是一回事。函數重載的關鍵是函數的參數列表——也稱為函數特征標。如果兩個函數的參數數目和類型相同,同時參數的排列順序也相同,則他們的特征標相同,而變量名是無關緊要的。C++允許定義名稱相同的函數,條件是它們的特征標不同。 是函數重載中有幾點需要注意: - 使用被重載的函數時,需要在函數調用中使用正確的參數類型。 - 編譯器在檢查函數特征標時,將把引用類型和類型本身視為同一個特征標。 - 匹配函數時,不區分const和非const變量,非const變量可以匹配const和非const參數變量,而const變量只能匹配const參數變量。 - 函數重載時,特征標必須不同,返回類型可以不同。 - 重載函數匹配時,根據變量的類型調用最匹配的類型。 當函數基本上執行相同的任務,但使用不同形式的數據時,才應采用函數重載,盡可能的使用默認參數實現相同的目的。
運算符重載也是一種形式的C++多態,函數多態旨在能夠用同名的函數來完成相同的基本操作,即使這種操作被用于不同的數據類型,運算符重載就是將函數重載的概念擴展到運算符上,允許賦予C++運算符多種含義 ,并且可以將運算符重載擴展到用戶自定義的類型。 要重載運算符,需要使用關鍵字Operator,后面接一個有效的C++運算符,構成運算符函數的特殊函數形式。使用重載的運算符時,運算符左側的對象為調用對象,右側的對象是作為參數被傳遞的對象。在調用重載運算符時,可以由對象顯式的使用運算符函數表示法來調用它。
重載的運算符不必是成員函數,運算符重載其實就是對使用數據類型擴充到用戶定義的類型,基本上重載的運算符不改變其原來的含義,具體的限制如下: - 重載后的運算符必須至少有一個操作數是用戶定義的類型,這將防止用戶為標準類型重載運算符; - 使用運算符時不能違反運算符原來的句法規則,不能修改運算符的優先級; - 只能重載C++中有的運算符,不能創建新的運算符; - C++中存在不能重載的運算符:sizeof,.,::,?,typeid,const_cast,dynamic_cast,reinterPRet_cast,static_cast; - C++中有些運算符只能通過成員函數進行重載:=,(),[],->。
新聞熱點
疑難解答
圖片精選