#include<iostream>
using namespace std;
//类外实现先声明,再定义,再友元
template<class T1,class T2>
class Person;
//template<class T1, class T2> void printPerson2(Person<T1, T2>& p);
template<class T1, class T2>
void printPerson2(Person<T1, T2>& p)
{
cout << "类外实现 ---- 姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
template<class T1,class T2>
class Person
{
//类内实现全局函数友元,,一定要加上<>
friend void printPerson2<>(Person<T1, T2>& p);
//类内实现全局函数友元
friend void printPerson1(Person<T1, T2>& p)
{
cout << "类内实现 ---- 姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
public:
Person(T1 name, T2 age)
{
this->m_Age = age;
this->m_Name = name;
}
private:
T1 m_Name;
T2 m_Age;
};
//1.全局函数在类内实现
void test01()
{
Person<string, int> p1("坤坤", 18);
printPerson1(p1);
}
//1.全局函数在类外实现
void test02()
{
Person<string, int> p2("咯咯", 20);
printPerson2(p2);
}
int main() {
test01();
test02();
}
05-24
385
12-15