關於繼承和覆蓋(Override)的一些基礎知識

2021-04-01 06:43:57 字數 969 閱讀 1569

/*

繼承(inherit)

所有基類的成員(包括被覆蓋的成員)都被派生類自動擁有,這就是繼承。

覆蓋(override)

如果派生類定義了和基類同名的成員,就說派生類的成員覆蓋了基類的成員。

有時這個詞會被不假思索的人說成是「過載」,那overload是什麼!

注意:只要同名,不論資料成員的型別或函式成員的的形參列表是否相同,都是覆蓋。

相關規則:

1.所有基類的成員(包括被覆蓋的成員)都被派生類自動擁有,

但在派生類中,被覆蓋的成員與沒有被覆蓋的成員訪問方式不同。

一般的訪問只是訪問未被覆蓋的成員及覆蓋者,不能訪問被覆蓋者。

2.只能以如下兩種形式訪問派生類中隱含的被覆蓋的成員:

a.在派生類(或派生類的派生類)中,以「base::overridee(基類::被覆蓋者)」的形式訪問。

b.在派生類(和派生類的派生類)外,用基型別的指標p指向派生類,然後以「p->overridee()」的形式訪問。

特例:虛函式顯然是個例外。當子類中的虛函式成員和父類中的同名時,形參列表相同時算覆蓋,

但此時不能用上面2.b.中的方法訪問,這正是虛函式的便利性所在;形參列表不同時可以叫隱藏(hide),

被隱藏的虛函式可以用2.b.中的方法訪問,這樣就破壞了本來使用虛函式所追求的便利。

*/#include

#include

class a

void g(void)

virtual void f(void)

class b: public a  //b有四個資料成員:num1,num2,a::num1,a::num2和四個函式成員。

void g(int) //與基類的g(void)同名,覆蓋了基類的g(void)。

virtual void f(int) //與基類的f(void)同名,但形參列表不同,隱藏了基類的f(void)。

}; main()

C 重寫 override 和覆蓋 new

重寫 用關鍵字 virtual 修飾的方法,叫虛方法。可以在子類中用override 宣告同名的方法,這叫 重寫 相應的沒有用virtual修飾的方法,我們叫它實方法。重寫會改變父類方法的功能。覆蓋 在子類中用 new 關鍵字修飾 定義的與父類中同名的方法,叫覆蓋。覆蓋不會改變父類方法的功能。示例 ...

Overload與Override(覆蓋)的區別

過載方法 重寫方法 方法簽名引數列表必須修改 不能修改 返回型別可以修改 子類返回值 層次 父類返回值 層次 丟擲異常可以修改 子類丟擲異常範圍 父類丟擲異常範圍 方法許可權修飾符可以修改 子類許可權 父類許可權 測試 如下 parent類 public class parent child類 pu...

C 過載 覆蓋(override)與隱藏

c 過載 覆蓋 override 與隱藏 稍微懂得點oop的人都知道過載,那是多型性的重要體現!可是在c 中你能分清成員函式的過載 覆蓋嗎?這個好像也不難,過載存在與同乙個類中,而覆蓋存在於派生類於基類中!可是如果再加上隱藏呢?說實話,以前我從來沒有聽說過這個概念!也不知道自己曾經捏造的程式,出了多...