C++友元重载运算符,模板类友元重载

来源:互联网 发布:保湿乳液推荐 知乎 编辑:程序博客网 时间:2024/05/20 08:02
  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. template <class T>  
  6. class Test;                        // 模板类前置声明  
  7.   
  8. template<class T>  
  9.   
  10. ostream& operator << (ostream& out, const Test<T>& obj);      // 模板类友元前置声明  
  11.   
  12. template<class T>  
  13.   
  14. class Test  
  15. {  
  16.   
  17. public:  
  18.   
  19.     friend ostream& operator << <> (ostream& out, const Test<T>& obj);       // 模板类友元定义,注意格式"<>"  
  20.   
  21.     Test(T n=0):num(n){}  
  22.   
  23.     Test(const Test<T>& copy)  
  24.     {  
  25.   
  26.         num = copy.num;  
  27.   
  28.     }  
  29.   
  30. private:  
  31.   
  32.     T num;  
  33.   
  34. };  
  35.   
  36. template<class T>  
  37.   
  38. ostream& operator << (ostream& out, const Test<T>& obj)  
  39. {  
  40.   
  41.     out<<obj.num<<endl;  
  42.   
  43.     return out;  
  44. }  
  45.   
  46. int main()  
  47. {  
  48.   
  49.     Test<int> t(2);  
  50.   
  51.     cout<<t;  
  52.   
  53.     return 0;  
  54. }  
  55.   
  56. // 第二种格式  
  57. /*  
  58.   
  59. #include <iostream>  
  60.   
  61. using namespace std;  
  62.   
  63. template<class T>  
  64.   
  65. class Test  
  66.   
  67. {  
  68.   
  69. public:  
  70.   
  71.     template<class S>                   // 注意<class S>S  
  72.     friend ostream& operator << (ostream& out, const Test<S>& obj);  
  73.   
  74.   
  75.     Test(T n=0):num(n) {}  
  76.   
  77.   
  78.   
  79.     Test(const Test<T>& copy)  
  80.   
  81.     {  
  82.   
  83.         num = copy.num;  
  84.   
  85.     }  
  86.   
  87.   
  88.   
  89. private:  
  90.   
  91.     T num;  
  92.   
  93. };  
  94. // 注意<class T>和<class S>都行  
  95.   
  96. template<class T>  
  97.   
  98.   
  99. ostream& operator << (ostream& out, const Test<T>& obj)  
  100. {  
  101.   
  102.   
  103.         out<<obj.num<<endl;  
  104.   
  105.   
  106.         return out;  
  107. }  
  108.   
  109.   
  110. int main()  
  111.   
  112.   
  113. {  
  114.   
  115.   
  116.     Test<int> t(2);  
  117.   
  118.   
  119.     cout<<t;  
  120.   
  121.   
  122.     return 0;  
  123.   
  124.   
  125. }  
0 0
原创粉丝点击