C 之成員函式的過載,覆蓋,隱藏

2021-07-05 02:28:14 字數 1133 閱讀 2761

(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 關鍵字可有可無.只能靠引數而不能靠返回值型別的不同來區分過載函式.並不是兩個名字相同的函式就能構成函式過載,得具有相同的作用域.過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼...