1 #include <iostream>
2 using namespace std;
3
4 //模板类的声明,可以引用友元类,也可以创建引用或者指针,不能创建全局对象
5 template<class T>class showit;
6
7 //错误
8 //showit<int> myint;
9
10 //模板类
11 template <class T>
12 class myclass
13 {
14 public:
15 myclass(T m,T n):a(m),b(n)
16 {
17
18 }
19 ~myclass()
20 {
21
22 }
23
24 private:
25 T a;
26 T b;
27
28 //模板函数声明也必须要带模板声明
29 template<class T>
30 friend void show(myclass<T> &my);
31
32 //声明友元类
33 friend class showit<T>;
34 };
35
36 template<class T>
37 void show(myclass<T> &my)
38 {
39 cout << my.a << my.b << endl;
40 }
41
42 //友元类,包装一下模板类
43 template<class T>
44 class showit
45 {
46 public:
47 myclass<T> *p;
48 void set(T a, T b)
49 {
50 p = new myclass<T>(a, b);
51 cout << p->a << p->b << endl;
52 }
53 };
54
55 void main()
56 {
57 /*myclass<int> my1(29, 39);
58 show(my1);*/
59
60 showit<int> showit1;
61 showit1.set(12, 34);
62 cin.get();
63 }