#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);
template<class T>
friend ostream& operator<<(ostream&os, 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)
{
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;
}