类模板(class template)友元(friend) 的 全部六种形式

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 myC2; //必须为T

37.//C2 myC2; //实例化不同, 无法使用

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 myC2;

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 myC2;

66.public:

67.void printC2() {

68. std::cout << "this is class Pal3 : ";

69. myC2.print();

70. }

71.};

72.

73.class Pal4 {

74. C2 myC2; //注意Pal4是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 pc; //Pal类必须实例化为C

87. pc.printC(); //可以使用

88.//Pal pci;

89.//pci.print(); //报错, 访问了私有成员

90.

91. Pal2 pi2; //Pal2类可以随意实例化

92. pi2.printC();

93.

94. Pal pi; //有相同的示例化, 在类声明C2

95. pi.printC2();

96.

97. pi2.printC2(); //注意, Pal2类被实例化为, 内部C2类被实例化为

;

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.

相关文档
最新文档