1. 程式人生 > >C++中的過載 覆蓋和隱藏

C++中的過載 覆蓋和隱藏

一.過載overload
在同一個可訪問區域內被宣告的幾個具有不同引數列的(引數型別,個數,順序不同)同名函式,程式會根據不同的引數列來確定具體呼叫哪個函式。過載不關心函式的返回值型別,即返回型別不同步能構成過載。。此外,const成員函式也能構成過載
a.處在相同的空間中,即相同的範圍內。(在同一個類內)
b.函式名相同。
c.引數不同,即引數個數不同,或相同位置的引數型別不同。
d.const成員函式和非const成員函式可以形成過載。
e.virtual關鍵字,返回型別對是否能夠成過載無任何影響。

二.覆蓋overrde
是指派生類中,存在重新定義的函式,其函式名,引數列表,返回型別必須同父類的相對應的被覆蓋的函式嚴格一致,覆蓋函式和被覆蓋函式只有函式體不同,當派生類物件呼叫子類中該同名函式時會自動呼叫子類中的覆蓋版本,而不是父類中的被覆蓋函式版本,這種機制就叫做覆蓋。
a.不同的範圍(分別位於派生類和基類)
b.函式名字相同
c.引數相同
d.基類函式必須有virtual關鍵字

三.隱藏
指的是派生類型別的物件、指標、引用訪問基類和派生類都有的同名函式時,訪問的是派生類的函式,即隱藏了基類的同名函式。
a.如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)
b.如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)