友元成員函式模板:
#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的引數...