掌握类模板配合友元函数的类内实现和类外实现。
全局函数类内实现:直接在类内声明友元函数即可(推荐使用这种)
#include <iostream>
#include <Windows.h>
#include <string>using namespace std;template<typename T1, typename T2>
class Person
{
private:T1 m_Name;T2 m_Age;
public:Person(T1 name, T2 age){m_Name = name;m_Age = age;}// 全局函数类内实现,直接声明为类的友元函数friend void showPerson(Person<T1, T2> person){cout << "姓名:" << person.m_Name << " 年龄:" << person.m_Age << endl;}
};void test()
{Person<string, int> p("张三", 18); showPerson(p);
}int main(void)
{test();system("pause");return 0;
}
全局函数类外实现:需要让编译器提前知道全局函数的存在
#include <iostream>
#include <Windows.h>
#include <string>using namespace std;template<typename T1, typename T2>
class Person;template<typename T1, typename T2>
void showPerson(Person<T1, T2> person);template<typename T1, typename T2>
class Person
{
private:T1 m_Name;T2 m_Age;
public:Person(T1 name, T2 age){m_Name = name;m_Age = age;}// 全局函数类外实现,需要让编译器提前知道全局函数的存在// 添加空模板参数列表 <>friend void showPerson<>(Person<T1, T2> person);
};template<typename T1, typename T2>
void showPerson(Person<T1, T2> person)
{cout << "姓名:" << person.m_Name << " 年龄:" << person.m_Age << endl;
}void test()
{Person<string, int> p("张三", 18); showPerson(p);
}int main(void)
{test();system("pause");return 0;
}