名字隱藏與過載

2021-08-05 20:45:04 字數 811 閱讀 2158

一.繼承不會改變作用域

•繼承不會改變類成員的作用域,基類的成員永遠都是基類的成員,並不會因為繼承而變成子類的成員

–class human 

;–class student : public human

;

一.隱藏不是過載

•因為作用域的不同,分別在子類和基類中定義的同名成員函式(包括靜態成員函式),並不構成過載關係,相反是一種隱藏關係

–class

real

};–class

complex : public

real

};

一.作用域限定

•任何時候,無論在子類的內部還是外部,總可以通過作用域限定操作符「::」,顯式地呼叫那些在基類中定義卻為子類所隱藏的成員函式

–class complex : public real 

};–complex c (1, 2);

real r (3);

c.real::add (r);

一.using宣告

•通過using宣告可將在基類中宣告的識別符號引入子類的作用域,就如同在子類中宣告的一樣

•如果所引入的識別符號是基類的成員函式,並且滿足函式過載的條件,那麼子類對基類的隱藏關係可以變為過載關係

–class complex : public real 

};

•using宣告只能針對識別符號,而不能針對具體的函式版本

•using宣告可能導致名字衝突,子類版本優先

過載 覆蓋與隱藏

一 總結如下表 函式名均相同 引數返回值型別 virtual有無 類別父類子類間 方法為public 繼承為public同同 必須有override同異 有編譯不通過同 均可無hide異均可 無關hide 同一類內同異 無關編譯不通過異 均可無關 overload 二 幾點說明 override 重...

覆蓋 隱藏與過載

1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。2 覆蓋是指派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字。例如 class base結果 a為基類指向派生類...

繼承 名字隱藏

include using namespace std peasant繼承自human,human繼承自cre 基類,生物類 class cre 析構函式 cre 成員函式 int gethp void sethp int hp int getdef int getact void move voi...