模版類就是類模版實例化以後的類,友元就是一種對函數訪問權限的控制,經過將函數設爲友元函數讓其可以訪問其餘外部函數不能訪問的"private"成員變量。微信
接着咱們介紹一個他們結合在一塊兒會產生什麼樣的結果,他們的結合分爲三種狀況:函數
一、模板類的非模板友元函數學習
該友元函數的特色是:測試
A)當該友元函數不使用類模版中的成員變量時,與通常的友元函數沒有區別:spa
B)當該友元函數使用類模版中的成員變量時,必須爲每個基本類型定義一個友元函數,好比show<int> 和 show<double>.這兩個並非函數的重定義,屬於函數重載。.net
測試代碼以下:code
1blog 2ci 3get 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
二、模板類的約束友元函數
該友元函數的特色是:每個類的具體化與友元的具體化要匹配,也就是說,int類具體化得到一個int類的友元函數,double類就具體化會得到一個double函數,int類具體化不可能得到double類函數;
要定義一個約束模板友元函數分三步:
A)在定義類以前聲明友元函數模板;
B)在類中聲明該友元函數模板;
C)定義友元函數,
注意,定義友元函數時形參列表中的」T「表明,具體化以後的類,並非類的模板參數,也就是假如具體化一個模板類」A<int>「, 」T「表明」A<int>「, 並非」int「;經過這種方式來約束該友元函數屬於某個具體化以後的模板。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
三、模板類的非約束友元函數
該友元函數的特色與約束友元函數相反:也就是每一個類的具體化都會得到每一個函數的具體化,假如具體化一個int類,在該類中仍然能夠得到一個double、string、int等類的友元函數。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
免費學習更多精品課程,登陸樂搏學院官網http://www.learnbo.com/
或關注咱們的官方微博微信,還有更多驚喜哦~
本文出自 「11219885」 博客,請務必保留此出處http://11229885.blog.51cto.com/11219885/1791770