類的覆蓋 過載和隱藏

2021-06-12 10:09:28 字數 1309 閱讀 6267

覆蓋:在基類中將乙個成員函式的宣告為虛函式,那麼子類中所有與該函式具有相同函式原型(返回型別、函式名、參數列、常量屬性、異常說明都相同)的成員函式就可以對基類中的虛函式形成覆蓋

過載:在同乙個作用域中,函式名相同,參數列不同的函式構成過載關係

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

舉例:classa {

public:

void foo (void); // a

int foo (double); // b

virtual void foo (void) const; //c

classb : public a {

public:

void foo (void); // d

void foo (void) const; // e

int foo (void) const; // f

a-b-c:過載

f:非法覆蓋

d-e:過載

e-c:覆蓋

d-a:隱藏

d-c:隱藏

關於多繼承同名隱藏:在沒有虛函式的情況下,如果某派生類的多個基類擁有同名的成員,同時,派生類又新增這樣的同名成員,在這樣的情況下,派生類成員將隱藏所有基類的同名成員。

#include

using namespace std;

class b1

{public:

int nv;

void fun(){

cout<<"member of b1"mwmber of b1

member of b2

這裡將通過作用域分辨符(::)明確的惟一標識了派生類中由基類所繼承來的成員,達到訪問的目的,解決成員被隱藏的問題。

如果某個派生類的部分或者全部直接基類是從另乙個共同的基類派生而來,在這些直接的基類中,從上一級基類繼承來的成員就擁有相同的名稱,因此派生類中也會產生同名現象,對這種型別的同名成員也要使用作用域分辨符來惟一標識,而且必須用直接基類來進行限定。

舉例如下:

#include

using namespace std;

class b0

{public:

int nv;

void fun()const{

cout<<"member of b0"<

using namespace std;

class b0

{public:

int nv;

void fun()const{

cout<<"member of b0"《執行結果:

member of b0

member of b0

過載 覆蓋和隱藏

部分文字內容摘自 高質量c c程式設計 1 過載 overload 1 相同的範圍,在同乙個類中。2 函式名相同,引數不同。3 virtual可有可無。這在平時設計中用的比較多,比如遊戲中角色說話,可以設計成 void senddialog const char content 預設 void se...

過載 覆蓋 隱藏

學習c 些許時間了,隨便寫點東西吧。過載 覆蓋 隱藏 1.過載 相同作用域,函式名相同,引數不同,virtual關鍵字可有可無。2.覆蓋 不同作用域,函式名相同,引數相同,有virtual關鍵字。3.隱藏 一般是父類和子類之間,函式名相同,引數不同時,不管有沒有virtual關鍵字都會導致隱藏。函式...

覆蓋,隱藏,過載

1.過載 覆蓋與隱藏 1 過載 成員函式具有以下的特徵時發生 過載 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2 覆蓋 也叫 繼承 指派生類函式覆蓋基類函式,特徵是 a 不同的範圍 分別位於基類與派生類中 b 函式名字相...