C 函式的過載 重寫 隱藏

2021-08-09 22:45:48 字數 1197 閱讀 3172

過載:

1、在同一作用域中。

2、函式名相同、引數個數或引數型別不同。

3、過載又稱為靜態多型,靜態繫結,靜態決議等。因為要實現過載,所以c++和c的命名方式有所不同。過載主要是為了減輕程式設計師對函式名的記憶負擔,讓所有功能相似的函式使用同一名字。

4、任何程式都僅有乙個 main 函式的例項。main 函式不能過載。

5、函式過載和重複申明的區別:

如果兩個函式宣告的返回型別和形參表完全匹配,

則將第二個函式宣告視為第一

個的重複宣告。如果兩個函式的形參表完全相同,但返回型別不同,則第二個宣告

是錯誤的。

6、過載與作用域:

一般的作用域規則同樣適用於過載函式名。如果區域性地宣告乙個函式,則該函式

將遮蔽而不是過載在外層作用域中宣告的同名函式。由此推論,每乙個版本的重

載函式都應在同乙個作用域中宣告。

隱藏:1、在不同作用域中,分別在基類和派生類中。

2、隱藏只要求函式名相同就行。

3、在派生類中只要不是重寫就是隱藏。

4、隱藏是因為在子類中定義了與基類同名的函式,而將基類的函式隱藏掉,要想訪問基類的函式,則必須加作用域限定符。

重寫:1、不在同一作用域中,分別在父類和子類中。

2、要求函式名相同,函式引數列表相同,返回值也相同(協變除外)。

3、基類函式必須是虛函式(virtual)。

4、訪問修飾符可以不同。

5、覆蓋是指父類中的虛函式在子類中被重新定義,所以在子類物件的虛函式表中將由子類中重新定義的函式位址覆蓋掉原來父類中虛函式的位址。協變是指虛函式的返回值可以是本類型別的指標或引用。動態多型又稱動態繫結、動態決議。

重寫與隱藏的區別:

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

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

(2)函式名字相同;

(3)引數相同;

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

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

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

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

隱藏後, 即在子類中看不到父類的函式。

C 的過載 重寫 隱藏

在同乙個class中 class demo 在同一訪問區內 如在同一.c cpp檔案內 即不在struct或者class中 4個fun都是過載函式 intfun int a void fun double a int fun int a,int b int fun float a 父類 class ...

過載 重寫 隱藏

共同點 函式名相同 定義 1 如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。2 類間。重寫和隱藏都發生在基類和派生類之間。重寫 覆蓋 發生在派生類和基類之間。必須滿足兩個條件 1 基類有virtual宣告 2 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...

C 函式的過載 重寫與隱藏

1 幾個概念與區別 1 函式重寫 也稱作覆蓋,是用於類的繼承中,函式名 引數個數 型別都相同,僅函式體不同。2 函式過載 是指同一作用域的不同函式使用相同的函式名,但是引數個數或型別不同。3 函式隱藏 既不是過載也不是重寫,例如 函式名及引數完全相同卻又不是虛函式,卻在子類中重新實現該函式,也就是所...