成員函式的過載 覆蓋 隱藏

2022-08-04 07:42:14 字數 1416 閱讀 3120

# 成員函式被過載的特徵:

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

(2)函式名字相同;

(3)引數不同;

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

-- 只能靠引數而不能靠返回值型別的不同來區分過載函式.

-- 並不是兩個名字相同的函式就能構成函式過載,得具有相同的作用域.

**過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼叫的時候根據函式的引數來區別不同的函式。

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

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

(2)函式名字相同;

(3)引數相同;

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

** 覆蓋(也叫重寫)是指在派生類中重新對基類中的虛函式(注意是虛函式)重新實現。

** 即函式名和引數都一樣,只是函式的實現體不一樣。

#隱藏是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆).

** 隱藏是指派生類中的函式把基類中相同名字的函式遮蔽掉了。

** 隱藏與另外兩個概念表面上看來很像,很難區分,其實他們的關鍵區別就是在多型的實現上。

~~~詳細總結一下:

##先來說說過載(overload)的含義,在日常生活中我們經常要清洗一些東西,比如洗車、洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式來洗車,或者用洗衣服的方式來洗一件衣服,但是誰也不會用洗衣服的方式來洗一輛車,否則等洗完時車早就散架了。我們並不要那麼明確地指出來就心知肚明,這就有過載的意思了。在同一可訪問區內被聲名的幾個具有不同引數列的(引數的型別、個數、順序不同)同名函式,程式會根據不同的引數列來確定具體呼叫哪個函式,這種機制叫過載,過載不關心函式的返回值型別。這裡,「過載」的「重」的意思不同於「輕重」的「重」,它是「重複」、「重疊」的意思。

##覆蓋(override),又叫重寫,是指派生類中存在重新定義的函式,其函式名、引數列、返回值型別必須同父類中的相對應被覆蓋的函式嚴格一致,覆蓋函式和被覆蓋函式只有函式體(花括號中的部分)不同,當派生類物件呼叫子類中該同名函式時會自動呼叫子類中的覆蓋版本,而不是父類中的被覆蓋函式版本,這種機制就叫做覆蓋。

##隱藏(hide): 指的是派生類的成員函式隱藏了基類函式的成員函式.隱藏一詞可以這麼理解:在呼叫乙個類的成員函式的時候,編譯器會沿著類的繼承鏈逐級的向上查詢函式的定義,如果找到了那麼就停止查詢了,所以如果乙個派生類和乙個基類都有同乙個同名(暫且不論引數是否相同)的函式,而編譯器最終選擇了在派生類中的函式,那麼我們就說這個派生類的成員函式"隱藏"了基類的成員函式,也就是說它阻止了編譯器繼續向上查詢函式的定義.

成員函式之過載 覆蓋 隱藏

過載 只有在同一類 定義中的 同名成員函式 才存在過載關係 主要特點是 函式的引數型別和數目有所不同 但 不能出現函式引數的個數和型別均相同 僅僅依靠返回值型別不同來區分的函式 這和普通函式的過載是完全一致的。另外,過載和成員函式是 否是虛函式 無關 覆蓋 在派生類中覆蓋基類中的 同名函式 要求兩個...

解析成員函式過載 隱藏 覆蓋

概念 過載 在同乙個作用域下,函式名相同,但函式引數列表不同 引數個數,型別,順序 隱藏 指派生類成員函式遮蔽了與這個函式同名的基類中的函式。1 派生類成員函式與基類成員函式同名,但引數列表不同。2 派生類成員函式與基類成員函式同名,且引數列表相同,但基類中函式並沒有用virtual關鍵字修飾 覆蓋...

成員函式的過載 覆蓋與隱藏

成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概 念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 1 ...