- 全局函数类内实现-直接在类内声明友元即可
- 全局函数类外实现-需要提前让编译器知道全局函数的存在
总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别
#include<iostream>
using namespace std;
#include<string>//2.全局函数配合友元 类外实现-先做函数模板声明,下方在做函数模板定义,在做友元
template<class T1,class T2>
class Person;template<class T1,class T2>
void printPerson2(Person<T1, T2>& p)
{cout <<"类外实现---" << "姓名:" << p.mname << "年龄:" << p.mage << endl;
}template<class T1,class T2>
class Person
{//1 . 全局函数配合友元 类内实现friend void printPerson(Person<T1, T2>& p){cout << "姓名:" << p.mname << "年龄:" << p.mage << endl;}//2 . 全局函数配合友元 类外实现//friend void printPerson2(Person<T1, T2>& p); 缺了一个东西 那就是 <>friend void printPerson2<>(Person<T1, T2>& p);
public:Person(T1 name, T2 age){this->mage = age;this->mname = name;}private:T1 mname;T2 mage;
};//全局函数类内实现
void test01()
{Person <string, int>p("Tom", 25);printPerson(p);
}//全局函数类外实现
void test02()
{Person <string, int>p("jerry", 21);printPerson2(p);
}int main()
{test01();test02();return 0;
}