(1)成員函式的過載
過載的概念相對簡單,只有在同一類定義中的同名成員函式才存在過載關係,主要特點是函式的引數型別和數目有所不同,但不能出現函式引數的個數和型別均相同,僅僅依靠返回值型別不同來區分的函式。這普通函式的過載是完全一致的。另外,過載和成員函式是否是虛函式無關,舉例來說:
class a
;
上述a類定義中的4個fun函式是過載關係,成員函式被過載的特徵:
1):相同的範圍(同乙個類中)
2):相同的函式名字。
3):不同的引數列表。
4):virtual關鍵字可有可無。
(2)成員函式的覆蓋
覆蓋是指:在派生類中覆蓋基類的同名函式,要求基類必須是虛函式,且:
1)與基類的虛函式有相同的引數個數
2)與基類的虛函式有相同的引數型別
3)與基類的虛函式有相同的返回型別
覆蓋的特徵如下:
1)不同的範圍(分別位於派生類和基類)
2)相同的函式名字
3)相同的引數
4)基類函式必須有virtual關鍵字
覆蓋與過載的區別:
1)覆蓋是子類和父類之間的關係,是垂直關係。過載是同乙個類中的不同方法之間的關係,是水平關係。
2)覆蓋要求引數列表相同,過載要求引數列表不同;覆蓋要求返回型別相同,過載則不要求。
3)覆蓋關係中,呼叫方法是根據物件的型別來決定的,過載關係是根據呼叫時的實參表與形參表來選擇方法體的。
(3)成員函式的隱藏
隱藏指的是在某些情況下,派生類中的函式遮蔽了基類的同名函式,這些情況包括:
1)兩個函式引數相同,但基類函式不是虛函式。和覆蓋的區別在於基類函式是否為虛函式。如**
class a
{public:
void fun(int xp){cout<
b b;
b.fun(2);//則呼叫的將是b中的函式fun,若需呼叫a中的fun,可以以這種形式呼叫:b.a::fun(2)。
2)兩個函式引數不同,無論基類函式是否是虛函式,基類函式都會被遮蔽。和過載的區別在於2個函式不在同乙個類中。如以下**」:
class a
{public:
virtual void fun(int xp){cout<
成員函式之過載 覆蓋 隱藏
過載 只有在同一類 定義中的 同名成員函式 才存在過載關係 主要特點是 函式的引數型別和數目有所不同 但 不能出現函式引數的個數和型別均相同 僅僅依靠返回值型別不同來區分的函式 這和普通函式的過載是完全一致的。另外,過載和成員函式是 否是虛函式 無關 覆蓋 在派生類中覆蓋基類中的 同名函式 要求兩個...
C 成員函式的過載,覆蓋,隱藏
對於物件導向程式設計的三個特性 封裝,繼承,多型。封裝 封裝的目的主要是為了實現源 的安全性。所以我們對其有訪問控制。c 語言使用了三個明確的關鍵字來設定類中的邊界 public,private,protected。繼承的類可以訪問protected成員,但是不能訪問私有成員。繼承 重用介面,如果乙...
成員函式的過載 覆蓋 隱藏
成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無.只能靠引數而不能靠返回值型別的不同來區分過載函式.並不是兩個名字相同的函式就能構成函式過載,得具有相同的作用域.過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼...