您的位置:首页 > 其它

模板类中使用友元

2018-03-08 19:44 120 查看
#include<iostream>
using namespace std;
//不要滥用友元
//类前声明
template<class T>class Preson;
template<class T> void PrintPerson(Preson<T>& p);

template<class T>
class Preson{
public:
Preson(T age, T id);
/*windows下写:
template<class T>
friend ostream& operator<<(ostream&os, Preson<T>&p);
可以,而在Linux下报错,这是因为编译器的差异;
而写成这样都可以:
friend ostream& operator<<<T>(ostream&os, Preson<T>&p);
*/
template<class T>
friend ostream& operator<<(ostream&os, Preson<T>&p);
//普通友元函数
/*windows下写:
template<class T>
friend void PrintPerson(Preson<T>& p);
可以,而在Linux下报错,这是因为编译器的差异;
而写成这样都可以:
先在类外做一个类外声明
friend void PrintPerson<T>(Preson<T>& p);
*/

friend void PrintPerson<T>(Preson<T>& p);
void show();
private:
T mAge;
T mID;
};

template<class T>//记住添加
Preson<T>::Preson(T age, T id)/*Preson::Preson(T age, T id)这样写错误,类内编写不需要添,
添加说明是个具体类,实现时可以传进参数类型*/

{
this->mID = id;
this->mAge = age;
}

//重载左移运算操作符
template<class T>
ostream& operator<<(ostream&os, Preson<T>&p)
{
os << "Age:" << p.mAge << " ID:" << p.mID << endl;
return os;
}

template<class T>//记住添加
void Preson<T>::show(){
cout << "Age:" << mAge << " ID:" << mID << endl;
}

template<class T>
void PrintPerson(Preson<T>& p)
{
cout << "Age:" << p.mAge << " ID:" << p.mID << endl;
}

void test01()
{
Preson<int>p(10, 20);
p.show();
cout << p;
PrintPerson(p);
}
int main()
{
test01();

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