C++11新標(biāo)準(zhǔn)-5.using的特殊使用(Alias Template)

這篇隨筆,我們來(lái)討論一下在C++中(包含新舊語(yǔ)法)using的基本使用和一個(gè)比較特殊的使用方式。

1.引入命名空間

可能在C++的初學(xué)者眼中,using關(guān)鍵字就是對(duì)常見(jiàn)的是這兩句代碼:

using namespace std;和using std::cout;

當(dāng)然,這也是using的最基本的使用方法。

2.using關(guān)鍵字在類繼承的中的作用

(1)派生類部分覆蓋基類的成員函數(shù)

在下面的代碼中,基類中兩個(gè)成員函數(shù)形成函數(shù)重載,在派生類中只對(duì)基類的一個(gè)成員函數(shù)進(jìn)行了函數(shù)覆蓋(另一個(gè)并沒(méi)有覆蓋),此時(shí)在派生類中Func(int)這個(gè)函數(shù)就被隱藏了,此時(shí)如果通過(guò)派生類對(duì)象調(diào)用該方法就會(huì)出現(xiàn)編譯錯(cuò)誤(如下圖所示)。

此時(shí),想要以簡(jiǎn)單的方式解決這個(gè)問(wèn)題(不需要在派生類中重寫(xiě)該方法),只需要在派生類中寫(xiě)一句? using Base::Func;? 即可。


(2)在類的私有繼承中

在類的繼承中,存在一個(gè)private繼承關(guān)系,如下代碼所示,私有繼承時(shí),基類的成員方法不能在派生類中使用。

如果需要在私有繼承的派生類中使用基類的成員方法,可以使用using關(guān)鍵字,在派生類中添加一句代碼:???????? public:? using Base::Func;

3.使用using關(guān)鍵字來(lái)定義別名

(1)定義普通類型的別名(與typedef類似)

首先,利用using關(guān)鍵字來(lái)定義別名的代碼有更好的可讀性,看下面的例子:

定義一個(gè)函數(shù)指針,指向的函數(shù)返回值是void,輸入?yún)?shù)是int型

可以

可以看出,使用using關(guān)鍵字類似于一種賦值,函數(shù)指針的類型也可以更好的識(shí)別出來(lái)。


(2)使用using指定模板的別名(typedef做不到)

如下的代碼,可以看出使用using可以聲明一個(gè)模板類的別名,但是typedef不行。

最后一個(gè)例子是侯捷老師的課程所涉及的using的高級(jí)用法。


4.總結(jié)

using是C++舊語(yǔ)法中的一個(gè)關(guān)鍵字,而在C++11的新標(biāo)準(zhǔn)中賦予了新的意義,靈活的使用using關(guān)鍵字可以解決之前難以解決的問(wèn)題。

參考

侯捷老師的c++11新特性視頻

https://blog.csdn.net/zzyczzyc/article/details/94290574

https://blog.csdn.net/zxc024000/article/details/79438539?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容