16.2.8 类模板与友元
这里为了测试友元函数,所以将Person类的属性设置为私有。
1、全局函数类内实现
这里有一个全局函数做友元,用来输出Person的信息。
#include <string>
#include <iostream>
using namespace std;
template<class T1, class T2>
class Person
{
friend void printPerson(Person<T1, T2>& p)
{
cout << "姓名:" << p.name << endl;
cout << "年龄:" << p.age << endl;
}
public:
Person(T1 name, T2 age)
{
this->name = name;
this->age = age;
}
private:
T1 name;
T2 age;
};
下面来调用一下试试:
int main()
{
Person<string, int> p("Tom", 18);
printPerson(p);
}
2、全局函数类外实现
这里友元函数只在类内声明。
但全局函数的实现要在声明之前,但实现时用到了Person类,此时类还没定义,所以再前面要先声明Person类。
#include <string>
#include <iostream>
using namespace std;
template<class T1, class T2>
class Person;
template<class T1, class T2>
void printPerson(Person<T1, T2>& p)
{
cout << "姓名:" << p.name << endl;
cout << "年龄:" << p.age << endl;
}
template<class T1, class T2>
class Person
{
friend void printPerson(Person<T1, T2>& p);
public:
Person(T1 name, T2 age)
{
this->name = name;
this->age = age;
}
private:
T1 name;
T2 age;
};
下面来调用一下试试:
int main()
{
Person<string, int> p("Jerry", 18);
printPerson(p);
}