掌握类模板配合友元函数的类内实现和类外实现。
全局函数类内实现:直接在类内声明友元函数即可(推荐使用这种)
#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;
}