1.在當前檔案中引入命名空間
這是我們最熟悉的用法,例如:using namespace std;
2.在子類中使用 using 宣告引入基類成員名稱(參見c++ primer)
在private或者protected繼承時,基類成員的訪問級別在派生類中更受限:
class base
protected:
std::size_t n;
};class derived : private base ;
在這一繼承層次中,成員函式 size 在 base 中為 public,但在 derived 中為 private。為了使 size 在 derived 中成為 public,可以在 derived 的 public
部分增加乙個 using 宣告。如下這樣改變 derived 的定義,可以使 size 成員能夠被使用者訪問,並使 n 能夠被 derived的派生類訪問:
class derived : private base ;
另外,當子類中的成員函式和基類同名時,子類中重定義的成員函式將隱藏基類中的版本,即使函式原型不同也是如此(隱藏條件見下面)。
如果基類中成員函式有多個過載版本,派生類可以重定義所繼承的0
個或多個版本,但是通過派生型別只能訪問派生類中重定義的那些版本,所以如果派生類想通過自身型別使用所有的過載版本,則派生類必須要麼重定義所有過載版本,要麼乙個也不重定義。有時類需要僅僅重定義乙個過載集中某些版本的行為,並且想要繼承其他版本的含義,在這種情況下,為了重定義需要特化的某個版本而不得不重定義每乙個基類版本,可能會令人厭煩。可以在派生類中為過載成員名稱提供 using 宣告(為基類成員函式名稱而作的 using 宣告將該函式的所有過載例項加到派生類的作用域),使派生類不用重定義所繼承的每乙個基類版本。乙個 using 宣告只能指定乙個名字,不能指定形參表,使用using宣告將名字加入作用域之後,派生類只需要重定義本型別確實必須定義的那些函式,對其他版本可以使用繼承的定義。
「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:
1、如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)
2、如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)
#include "stdafx.h"
#include
using namespace std;
class base
;class derived : base
};int main()
c using 關鍵字小結
一 using作為指令,有如下兩個作用 1 匯入其他命名空間或命名空間中定義的型別,這樣就可以不必對型別使用完全限定名了。注意 1 using引入命名空間,並不等於編譯器編譯時載入該命名空間所在的程式集,程式集的載入決定於程式中對該程式集是否存在呼叫操作,如果 中不存在任何呼叫操作則編譯器將不會載入...
c using 關鍵字小結
一 using作為指令,有如下兩個作用 1 匯入其他命名空間或命名空間中定義的型別,這樣就可以不必對型別使用完全限定名了。注意 1 using引入命名空間,並不等於編譯器編譯時載入該命名空間所在的程式集,程式集的載入決定於程式中對該程式集是否存在呼叫操作,如果 中不存在任何呼叫操作則編譯器將不會載入...
C static關鍵字作用總結
c 中static關鍵字作用總結 1.先來介紹它的第一條也是最重要的一條 隱藏。static函式,static變數均可 當同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。舉例來說明。同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。複製 char a a gl...