1. 程式人生 > >過載,覆蓋和隱藏區別

過載,覆蓋和隱藏區別

1.過載(overload)的特徵:

a).幾個函式如果是過載,那麼他們的作用域相同,即在同一個範圍內。【例如:在同一個類中,或者在同一個全域性中】

b).函式名字必須相同,但是引數必須不同【個數可以不同,型別也可以不同】

c).virtual關鍵字可有可無.

【過載的作用就是同一個函式有不同的行為】

2.覆蓋(override)的特徵:

a).覆蓋指的是派生類的函式覆蓋基類的函式,因此範圍不同,一個是在基類,一個是在派生類中。

b).函式名字和引數都必須完全相同。

c).virtual關鍵字必須出現在基類的函式中。

【所謂的覆蓋指的是:用基類物件的指標或者引用訪問虛擬函式時會根據實際的型別決定所呼叫的函式】

3.隱藏(hide)的特徵:

a).派生類的函式隱藏(或者說是遮蔽)了與其同名的基類的函式。隱藏的理解:在呼叫一個類的成員函式的時候,編譯器會沿著類的繼承鏈逐級的向上查詢函式的定義,如果找到了,那麼就停止查找了。所以如果一個派生類和他的基類都有同一個同名(且不論其引數)的函式,而編譯器最終選擇了派生類中的函式,那麼就說派生類中的成員函式隱藏了基類中的成員函式,也就是說它阻止了編譯器繼續向上查詢的行為。

b).因為覆蓋中說到了基類中的函式存在了virtual關鍵字,且名字和引數都相同的情況下是覆蓋了,那麼隱藏的特點就是如下了:

    1).在派生類和基類中函式名相同,但引數不同(因為引數不同就不會構成了覆蓋的特點),所以,virtual關鍵字已經顯得不重要了,此時就只能構成隱藏了

    2).在派生類和基類中的函式名相同,引數相同,此時就要看virtual關鍵字了,要是沒有此關鍵字就構成隱藏了,有此關鍵字就是前面所說的覆蓋了。

總結:函式的覆蓋是發生在派生類與基類之間,兩個函式必須完全相同,並且都是虛擬函式。那麼不屬於這種情況的,就是隱藏了。

【覆蓋的函式是多型的,是存在vbtl中的函式才能構成覆蓋的關係;而隱藏的函式都是一般的函式,不支援多型,是在編譯階段就確定了的】

相關推薦

過載覆蓋隱藏區別

1.過載(overload)的特徵: a).幾個函式如果是過載,那麼他們的作用域相同,即在同一個範圍內。【例如:在同一個類中,或者在同一個全域性中】 b).函式名字必須相同,但是引數必須不同【個數可以不同,型別也可以不同】 c).virtual關鍵字可有可無. 【過載的作用

過載覆蓋隱藏區別

過載:是指在相同範圍內(同一個類),相同的函式名,但引數不一樣 覆蓋:是子類和父類範圍內而言的,函式名相同,而且引數相同,並且是virtual 函式,這樣如果是通過指標或引用來呼叫的話就可以根據實際的型別來動態決定呼叫子類還是父類的函式 隱藏:這個比較容易和覆蓋混淆,他們都

類成員函式的過載覆蓋隱藏區別

#include <iostream> #include <complex> using namespace std; class Base { public:     virtual void a(int x)    {    cout << "Base::a(int)"

類成員函式的過載覆蓋隱藏區別 (C++)

      這是本人第一次寫部落格,主要是想記錄自己的學習過程、心得體會,一是可以方便以後回顧相關知識,二是可以與大家相互學習交流。       關於C++中類成員函式的過載、覆蓋和隱藏區別,第一次看到這個問題是在準備找工作的時候在牛客網中(http://www.nowcoder.com/questionT

C++類成員函式的過載覆蓋隱藏區別

成員函式被過載(overload)的特徵:相同的範圍(在同一個類中);函式名字相同;引數不同;virtual關鍵字可有可無。覆蓋是指派生類函式覆蓋(override)基類函式,其特徵是:函式名字相同;引

類成員函式的過載覆蓋隱藏區別

成員函式被過載的特徵 (1)相同的範圍(在同一個類中);   (2)函式名字相同;   (3)引數不同;   (4)virtual 關鍵字可有可無。   覆蓋是指派生類函式覆蓋基類函式,特徵是 (1)不同的範圍(分別位於派生類與基類);   (2)函式名字相同;   (3)引數相同;   (4)基類函式

C++中過載覆蓋隱藏區別以及適用場景

一、過載、覆蓋和隱藏的區別 二、適用場景 1、過載:   適用於不同的資料型別都需要使用到的功能函式。以資料相加的函式為例,可以在同一個檔案內提供以下的過載函式以支援同樣的功能:   int add(int, int);/*2個整數相加*/   int add(int, int, int);/*3個整數相

C++中類成員函式的過載覆蓋隱藏區別超清楚!

1.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 2.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;

類成員函式的過載覆蓋隱藏(遮蔽)的區別

a.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 b.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;

java的過載覆蓋隱藏區別

過載:方法名相同,但引數不同的多個同名函式   注意:1.引數不同的意思是引數型別、引數個數、引數順序至少有一個不同      2.返回值和異常以及訪問修飾符,不能作為過載的條件(因為對於匿名呼叫,會出現歧義,eg:void a ()和int a() ,如果呼叫a(),出現歧義)      3.main方

類成員的函式的過載覆蓋隱藏區別

參考:https://www.nowcoder.com/questionTerminal/266d3a6d4f1b436aabf1eff3156fed951.函式過載的特徵:(1)必須在同一個類中(相同範圍)(2)函式名字必須相同但是函式型別可以不相同(3)引數類表可以不同(

C++中過載覆蓋隱藏區別

一、過載: 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回值型別來判斷。規則如下:1、相同的範圍(在同一個類中)2、函式名字相同3、引數不同4、Virtual關鍵字可有可無、二、覆蓋: 在繼承關係中,子類中定義了與父類同名的虛擬函式,從而子類自己本身定義的

過載覆蓋隱藏區別

“overload”翻譯過來就是:超載,過載,過載,超出標準負荷;“override”翻譯過來是:重置,覆蓋,使原來的失去效果。   先來說說過載(Overload)的含義,在日常生活中我們經常要清洗一些東西,比如洗車、洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式

Java中類成員函式過載覆蓋隱藏區別

其他擴充套件連結: 過載: 成員函式被過載的特徵: 1)相同的範圍:在同一個類中 2)函式名相同,引數不同 3)virtual可有可無 覆蓋: 派生函式覆蓋基類函式 1)位於不同的範圍內(子類

類成員函數的重載、覆蓋隱藏區別

c/c++1.重載是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。實現原理上:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然後這些同名函數就成了不同的函數(至少對於編譯器來說是這樣的)。如,有兩個同名函數:function func(p:inte

面向物件中的過載覆蓋隱藏

    1.過載是一個類內部實現相同機理的操作,但是操作的物件不同。主要體現在:  方法在同一個類中過載的方法名稱相同引數不同(引數的型別不同,引數的個數不同)virtual關鍵字可有可無    下面的程式碼對上面的說明進行解釋: #include "stdafx.h"

c++中的過載覆蓋隱藏

引用:http://blog.csdn.net/Kendiv/archive/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2006/04/25/675940.aspx<?xm

Performanced C++ 經驗規則(5):再談過載覆蓋隱藏

在C++中,無論在類作用域內還是外,兩個(或多個)同名的函式,可能且僅可能是以下三種關係:過載(Overload)、覆蓋(Override)和隱藏(Hide),因為同名,區分這些關係則是根據引數是否相同、是否帶有const成員函式性質、是否有virtual關鍵字修飾以及是否在同一作用域來判斷。在第四

C++父類與子類關係以及函式過載覆蓋隱藏規則

今天去HTC面試,筆試考了邏輯、c語言、c++語言幾個部分,C/C++考的全是基本語法,沒有考演算法。C語言部分做的還不錯,C++部分卻做的那麼多不確定,其中大部分是C++父子類之間關係以及函式過載、覆蓋以及隱藏規則。 在C++語言中,虛擬函式是非常重要的概念,虛擬函式是

C++類成員函式的過載覆蓋隱藏

成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引