#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;
}
模板类中使用友元
最新推荐文章于 2023-01-16 18:19:08 发布