繼承中的過載,重寫及相應隱藏規則開啟的時機

2021-06-09 14:51:49 字數 1038 閱讀 2429

在c++中的繼承中寫函式的時候,我們問題會遇到過載,重寫,隱藏函式這三大問題。在物件導向的程式設計中,對這三個概念的理解相應重要,否則會出現一些莫明其妙的事件。下面我們來解釋下這三個的概念:

過載:即在同乙個類中宣告相同的函式名,但型參列表的引數型別與及引數的數目不同時,應會發生過載。

示例**:

class a;

void f(int a){};

void f(double b){};

};

重寫:即基類中宣告virual的函式,子類繼承相應的函式,但實現了自己的方法。我們就稱為重寫(也稱覆蓋)。即子類呼叫同名的函式時,呼叫的是從基類重寫的函式,而還在是基類的函式實現。重寫是多型產生的機制,把基類中帶有virual關鍵字的函式,在子類中實現自己的版本。這叫重寫。注意與隱藏的區別之處。

示例**:

class a

注意:此時呼叫的b.print("hello")正確執行。但如果子類沒有重寫基類當中的同名virual函式。則此時b.print("hello")呼叫不能成功。因為產生了隱藏現象。凡是基類中virual函式,沒有在子類中重寫的,而子類定義了自己的同名不同引數型別的函式時,所有從基類繼承的同名函式都被隱藏(原因:virual函式沒有被子類重寫造成的),只有自己定義的函式可見。隱藏規則開啟了。看下面的**示例:

class a
總結:如果只是單純的重寫、過載。我們可以理解的非常容易,但是有了隱藏規則後,我們發現理解的難度真是不在乙個數量級上面。總結起來,我們只要記住什麼時候開啟隱藏規則後,就能輕鬆的避開陷阱了。只要記得下面三條原則,就ok

1.基類沒有virual函式,則子類定義了同名函式。開啟隱藏規則。

2.基類有virual函式,但子類沒有重寫,又定義了同名函式。開啟隱藏規則。

3.基類有virual函式,子類重寫了函式,又定義了同名函式。關閉隱藏規則。

個人技術**

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 ...

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

一 過載 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。二 重寫 覆蓋是指派生類函式覆蓋基類函式 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字。三 隱藏 隱藏 是指派生類的函式遮蔽了與其...

C 中過載,重寫,隱藏的區別

過載 過載是指在同乙個作用域下,函式的函式名相同,但是函式引數的個數,或者引數的型別,引數的順序不同。這時函式之間就構成了過載關係,這裡需要注意的是,如果函式的引數列表完全相同,僅僅是返回值型別不同並不能構成過載。同乙個作用域又怎麼理解呢?在這裡主要分兩種情況討論,一種是在類外但是函式在同乙個cpp...