友元與模板類

2021-08-17 11:49:50 字數 1160 閱讀 8636

友元成員函式模板:

#include using namespace std;

templateclass a; //當用到友元成員函式時,需注意友元宣告與友元定義之間的互相依賴。這是類a的宣告

templateclass b

;template//a的這個t決定了對於b的t型別友元,並且只友元a型別

class a

};templatevoid b::set_show(int x, a&a) //只有在定義類a後才能定義該函式,畢竟,它被設為友元是為了訪問類a的成員

int main(void)

類模板(class template)

的友元(friend)

和普通類的友元, 有很多區別,

主要原因是類模板包含模板引數(template parameter)

, 就會導致友元和類模板有很多匹配形式;

主要包含六種

形式:1. 類 - 友元(friend): "模板引數是當前類"的類模板;

2. 類 - 友元: "模板引數任意"的模板類;

3. 模板類 - 友元: "模板引數相同"的模板類;

4. 模板類 - 友元: "模板引數任意"的模板類

5. 模板類 - 友元: 類;

6. 模板類 - 友元: 當前模板引數(類); (c++11)

具體使用參見**及注釋,

**如下:

/*

* cppprimer.cpp

* * created on: 2013.11.24

* author: caroline

*//*eclipse cdt, gcc 4.8.1*/

#include #include template class pal; //pal朋友

class c

};template class c2

};template class pal

void printc2()

};template class pal2

void printc2()

};class pal3

};class pal4

};int main (void)

16 2 8 類模板與友元

這裡為了測試友元函式,所以將person類的屬性設定為私有。1 全域性函式類內實現 這裡有乙個全域性函式做友元,用來輸出person的資訊。include include using namespace std template classt1,class t2 class person publi...

C 中類模板與友元

類模板配合友元函式的類內和類外實現 全域性函式的類內實現 直接在類內生命友元即可 全域性函式的類外實現 需要提前讓編譯器知道全域性函式的存在 include using namespace std include 通過全域性函式來列印person的資訊 提前讓編譯器知道person類存在 templ...

模板類和友元

懶得抄了,直接截圖,後面對模板類友元函式是單個類具體化的友元,還有模板類所有具體化的友元進行自己理解的總結。總結 1.模板類的非模版友元函式 友元函式與 t無關時,友元和類的例項化是一對多的關係。即這個友元函式是所有類例項化的友元,可以訪問所有類裡面的成員物件。友元函式與 t有關時,比如包含t的引數...