C 中談過載 覆蓋 和隱藏

2021-07-13 02:19:39 字數 985 閱讀 6163

在學習c++的時候,在了解到多型類(存在虛函式的類)的時候我知道了有關物件模型的概念,在剖析了有關物件模型的知識後,對於其中的派生類繼承乙個多型基類的時候,會對父類的虛函式進行重寫,重寫也就是所謂的覆蓋掉繼承自父類的函式,將自己的物件模型中的相應的虛函式的槽位改為自己的函式,但是問題來了,我們之前學習了函式的過載,還有繼承中的函式隱藏,這些到底有什麼區別?所以做以下的整理希望能幫到在這裡迷惑的你

首先寫一段**

#includeusing namespace std;

class base

virtual void g(); //基類中的兩個g()構成的是過載

void g(int i);

void j();

};class d :public base

virtual void g(float f); //隱藏父類的函式

void g(int i); //隱藏父類的函式

};

上面的**中寫出來了函式過載、覆蓋、隱藏的三種關係

我通過下面幾個條件來區分他們

1.作用域

函式過載:相同的作用域,發生在乙個類體內

函式覆蓋:不同的作用域,發生在基類和派生類中

函式隱藏:不同的作用域,發生在基類和派生類中

2.函式原型

函式過載:在同個類體中,函式名相同,返回值和引數不同(兩個可都不同也可一者不同)

函式覆蓋:函式原型必須相同(協變不做考慮),函式名和引數都相同

函式隱藏:如果函式原型相同但是基類函式不是virtual;如果函式名相同,但是引數列表不同不管基類有無virtual關鍵字

做以下總結:

過載是發生在乙個類體中的函式名相同,引數列表或者返回值不同的不同函式;

覆蓋是在派生類中的與基類函式原型相同的派生類函式對基類函式的重寫;

隱藏是派生類中的與基類不是虛函式的函式原型相同、和與基類的虛函式函式名形同引數列表不同的函式的隱藏。

C 中覆蓋,過載和隱藏

include using namespace std struct foo void func int x 那麼,如果不用 using 宣告,拆分後 中的函式 func 不是過載應該是什麼呢?是隱藏 hide 下面是關於過載 覆蓋和隱藏的區別 這幾個概念都有乙個共同點 函式名稱相同,所以不免讓人混...

C 過載 覆蓋 和隱藏

這幾個概念都有乙個共同點 函式名稱相同,所以不免讓人混淆,大致的區別如下 過載 overload 必須在乙個域中,函式名稱相同但是函式引數不同,過載的作用就是同乙個函式有不同的行為,因此不是在乙個域中的函式是無法構成過載的,這個是過載的重要特徵 覆蓋 override 覆蓋指的是派生類的虛函式覆蓋了...

C 過載 覆蓋和隱藏

過載 覆蓋和隱藏 共同點 函式名稱相同。1 過載 必須在乙個域內,函式名稱相同但是函式引數不同。過載的作用就是同乙個函式有不同的行為。過載完全是乙個編譯時 或靜態 的概念。如果宣告了同名函式,編譯器會在編譯時處理這些同名函式的呼叫問題,確定呼叫哪乙個函式,執行時不 涉及呼叫過載函式的額外開銷或決定。...