您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-21 15:09 190 查看
#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;  

  

  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: