學習目標:
掌握類别範本配合友元函式的類內和類外實現
全域性函式類內實現-直接在類內宣告友元即可
全域性函式類外實現-需要提前讓編譯器知道全域性函式的存在
#include <iostream>
using namespace std;
//透過全域性函式 列印Person資訊
//提前讓編譯器知道Person類存在
template<class T1,class T2>
class Person;
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 printPerson(Person<T1,T2> p)
{
cout<<"姓名:"<<p.m_Name<<"年齡:"<<p.m_Age<<endl;
}
//全域性函式 類外實現
//加空模板引數列表
//如果全域性函式 是類外實現 需要讓編譯器提前知道這個函式的存在
friend void printPerson2<>(Person<T1,T2> p);
public:
Person(T1 name,T2 age)
{
this->m_Name=name;
this->m_Age=age;
}
private:
T1 m_Name;
T2 m_Age;
};
//1、全域性函式在類內實現
void test01()
{
Person<string,int>p("Tom",20);
printPerson(p);
}
//2、全域性函式在類外實現
void test02()
{
Person<string,int>p("Jerry",20);
printPerson2(p);
}
int main()
{
test02();
return 0;
}
總結:
建議全域性函式做類內實現,用法簡單,而且編譯器可以直接識別