模板类的友元重载方法
第一种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#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; } |
第二种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <iostream> using namespace std; template<class T> class Test { public: template<class S> // 注意<class 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; } |
发表评论
要发表评论,您必须先登录。