首页 > 其他 > 详细

模板类的友元重载

时间:2016-07-15 23:58:14      阅读:418      评论:0      收藏:0      [点我收藏+]

模板类的友元重载和普通类的友元重载有不同之处,可以参考这篇CSDN博客http://blog.csdn.net/ozwarld/article/details/7770808

 

#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://www.cnblogs.com/limera/p/template.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!