c 中的隱藏 過載 覆蓋(重寫)

2021-09-06 10:18:51 字數 957 閱讀 8604

1 過載與覆蓋

成員函式被過載的特徵:

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual關鍵字可有可無。 

覆蓋是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual關鍵字。

令人迷惑的隱藏規則

本來僅僅區別過載與覆蓋並不算困難,但是c++的隱藏規則使問題複雜性陡然增加。

這裡「隱藏」是指派生類的函式遮蔽了與其同名的基類函式

,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual

關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual

關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。

上面的程式中:

(1)函式derived::f(float)覆蓋了base::f(float)。

(2)函式derived::g(int)隱藏了base::g(float),而不是過載。

(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。

#include class

base

void g(float x)

void h(float x)

}; class derived : public

base

void g(int x)

void h(float x)

};

void main(void

)

c 中的隱藏 過載 覆蓋(重寫)

c 中的隱藏 過載 覆蓋 重寫 過載 同乙個類中 隱藏 子類重寫父類的非虛函式,或者是函式名相同,引數不同 覆蓋 重寫 重寫父類的虛函式,引數相同。1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。覆蓋是指派生類函式...

c 中的隱藏 過載 覆蓋(重寫)

1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字。令人迷惑的隱藏規...

c 中的隱藏 過載 覆蓋(重寫)

1 過載 覆蓋 隱藏 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。備註 函式過載只看引數個數和型別,不看返回值 但不能出現只是返回值不同的過載 覆蓋是指派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與基類 2 ...