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 }