類别範本與友元

Ricky001發表於2024-12-08

學習目標:
掌握類别範本配合友元函式的類內和類外實現

全域性函式類內實現-直接在類內宣告友元即可
全域性函式類外實現-需要提前讓編譯器知道全域性函式的存在

#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;
}

總結:
建議全域性函式做類內實現,用法簡單,而且編譯器可以直接識別

相關文章