码迷,mamicode.com
首页 > 其他好文 > 详细

模板类的友元重载

时间:2014-12-08 12:31:42      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:模板类

#include <iostream>
using namespace std;
template <class T>
class Test;                        // 模板类前置声明
template<class T>
ostream& operator << (ostream& out, const Test<T>& obj);      // 模板类友元前置声明
template<class T>
class Test
{
public:
 friend ostream& operator << <> (ostream& out, const Test<T>& obj);       // 模板类友元定义,注意格式"<>"
 Test(T n=0):num(n){}
 Test(const Test<T>& copy)
 {
  num = copy.num;
 }
private:
 T num;
};
template<class T>
ostream& operator << (ostream& out, const Test<T>& obj)
{
 out<<obj.num<<endl;
 return out;
}
int main()
{
 Test<int> t(2);
 cout<<t;
 return 0;
}
// 第二种格式
/*
#include <iostream>
using namespace std;
template<class T>
class Test
{
public:
    template<class S>                   // 注意<class S>S
    friend ostream& operator << (ostream& out, const Test<S>& obj);

    Test(T n=0):num(n) {}
 
    Test(const Test<T>& copy)
    {
        num = copy.num;
    }
 
private:
    T num;
};
// 注意<class T>和<class S>都行
template<class T>

ostream& operator << (ostream& out, const Test<T>& obj)
{

        out<<obj.num<<endl;

        return out;
}

int main()

{
 
     Test<int> t(2);

     cout<<t;

     return 0;

}

 

本文出自 “不胖不瘦不丑不帅” 博客,谢绝转载!

模板类的友元重载

标签:模板类

原文地址:http://jdmylove.blog.51cto.com/9688344/1587416

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!