类模板(class template)友元(friend) 的 全部六种形式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++ - 类模板(class template)友元(friend) 的全部六种形式及代码
C++(101)
版权声明:本文为博主原创文章,未经博主允许不得转载。
类模板(class template)的友元(friend)和普通类的友元, 有很多区别,
主要原因是类模板包含模板参数(template parameter), 就会导致友元和类模板有很多匹配形式;
主要包含六种形式:
1. 类- 友元(friend): "模板参数是当前类"的类模板;
2. 类- 友元: "模板参数任意"的模板类;
3. 模板类- 友元: "模板参数相同"的模板类;
4. 模板类- 友元: "模板参数任意"的模板类
5. 模板类- 友元: 类;
6. 模板类- 友元: 当前模板参数(类); (C++11)
具体使用参见代码及注释,
[cpp]view plain copy print?
1.
32.
33.template
34.class Pal {
35. C myC;
36. C2
37.//C2
38.public:
39.void printC() {
40. std::cout << "this is class Pal : ";
41. myC.print();
42. }
43.void printC2() {
44. std::cout << "this is class Pal : ";
45. myC2.print();
46. }
47.};
48.
49.template
50.class Pal2 {
51. C myC;
52. C2
53.public:
54.void printC() {
55. std::cout << "this is class Pal2 : ";
56. myC.print();
57. }
58.void printC2() {
59. std::cout << "this is class Pal2 : ";
60. myC2.print();
61. }
62.};
63.
64.class Pal3 {
65. C2
66.public:
67.void printC2() {
68. std::cout << "this is class Pal3 : ";
69. myC2.print();
70. }
71.};
72.
73.class Pal4 {
74. C2
75.public:
76.void printC2() {
77. std::cout << "this is class Pal4 : ";
78. myC2.print();
79. }
80.};
82.int main (void) {
83.
84. std::cout << "Hello Mystra!" << std::endl;
85.
86. Pal
87. pc.printC(); //可以使用
88.//Pal
89.//pci.print(); //报错, 访问了私有成员
90.
91. Pal2
92. pi2.printC();
93.
94. Pal
95. pi.printC2();
96.
97. pi2.printC2(); //注意, Pal2类被实例化为
98.
99. Pal3 p3;
100. p3.printC2();
101.
102. Pal4 p4;
103. p4.printC2();
104.
105.return 0;
106.}
输出:
[plain]view plain copy print?
1.