成員函式的過載,覆蓋和隱藏

2021-07-11 04:21:07 字數 3083 閱讀 1890

什麼是函式過載:

在c++程式中,可以將語義,功能相似的函式用同乙個名字表示,即就是函式過載。

函式過載的原因:

(1)便於記憶,提高函式的易用性;

(2)類的建構函式需要過載機制;(因為c++規定建構函式與類同名,建構函式只能有乙個名字,若要有不同的方法建立物件,只能依靠過載)

成員函式被過載的特徵:

(1)在同乙個類範圍內;

(2)函式的名字相同

(3)函式的引數不同

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

eg:

#include 

using namespace std;

class base

~base(){}

public:

void

fun()

;int main()

測試結果:

此處的base中的fun()和fun(int)構成了函式過載;

[root@localhost

c++]# vim test.cpp

[root@localhost

c++]# g++ test.cpp -o test

[root@localhost

c++]# ./test

base:

:fun()

base:

:fun(int)

[root@localhost

c++]#

注意:要防止隱式型別轉換;

eg:

void fun(int){}

void fun(float){}

當傳入引數是0.5時編譯器會因為隱式型別轉換而不知道要呼叫哪乙個函式,所以要進行顯示呼叫即:

fun(int(0.5));

或fun(float(0.5));

成員函式的覆蓋:

(覆蓋是指派生類函式覆蓋基類函式)

覆蓋的特徵:

(1)分別位於派生類基類範圍;

(2)函式名字相同

(3)函式的引數相同

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

eg:

#include 

using namespace std;

class base

~base(){}

public:

virtual

void

fun()

;class d : public

base

~d(){}

public:

void

fun()

此處的d中的fun()函式覆蓋了父類base中的fun()函式;

若父類中的fun()函式沒有關鍵字virtual,main()中呼叫的就是base中的fun()函式;加了virtual關鍵字父類的fun()函式被虛擬繼承,就只能呼叫d自己的fun()函式;

成員函式的隱藏:

隱藏是指派生類的函式遮蔽了與其同名的基類函式

隱藏的特徵:

(1)若派生類的函式與基類的函式同名,但是引數不同,則無論基類的函式有無virtual關鍵字,基類函式都將被隱藏

(2)若派生類的函式與基類的函式同名同參,並且基類函式**有無

virtual**關鍵字,基類函式將被隱藏

第(1)種

#include 

using namespace std;

//父類base::fun()沒有virtual關鍵字,但和子類d::fun()同名,不同參,因此父類的fun()函式被隱藏;

class base

~base(){}

public:

void

fun()

;class d : public

base

~d(){}

public:

void

fun(int)

測試結果如下:

[root@localhost c++]# ./test 

d::fun(int)

[root@localhost c++]#

第(2)種

#include 

using namespace std;

//父類base::fun()

與子類d::fun()同名同參,所以父類的fun()函式被隱藏

class base

~base(){}

public:

virtual

void

fun()

;class d : public

base

~d(){}

public:

void

fun()

測試結果如下:

[root@localhost

c++]# g++ test.cpp -o test

[root@localhost

c++]# ./test

d::fun()

[root@localhost

c++]#

成員函式的過載 覆蓋 隱藏

成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無.只能靠引數而不能靠返回值型別的不同來區分過載函式.並不是兩個名字相同的函式就能構成函式過載,得具有相同的作用域.過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼...

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

我們在學習c 中總會有很多概念容易搞混,其中成員函式的過載 覆蓋和隱藏這三個概念就經常讓很多人頭大。下面我們就來介紹一下這三個的區別 成員函式被過載的條件是 1 相同的範圍也就是要在同乙個類中 2 函式名字相同 3 引數不同 這裡包括引數型別,引數的順序,引數的個數 4 virtual關鍵字可有可無...

成員函式之過載 覆蓋 隱藏

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