友元函數分為友元全局函數和友元成員函數
先看友元全局函數:
定義一個Time類
#ifndef TIME_H
#define TIME_H
class Time
{
public:
Time(int h, int m, int s)
{
m_iHour = h;
m_iMinute = m;
m_iSecond = s;
}
private:
int m_iHour;
int m_iMinute;
int m_iSecond;
};
#endif // !TIME_H
在main函數中,定義一個打印時間的函數printTime(),由于Time中的數據成員被限制為私有,因此全局函數是不能訪問的。
#include "time.h"
#include <iostream>
using namespace std;
void printTime(Time &t);
int main()
{
Time t(6, 34, 25);
printTime(t);
system("pause");
return 0;
}
void printTime(Time &t)
{
cout << t.m_iHour << ":" << t.m_iMinute << ":" << t.m_iSecond << endl;
}
此時編譯會出錯。
因此友元函數要出場了,為了能訪問Time類中的私有數據成員,需要在Time類中聲明一個友元全局函數,如下:
#ifndef TIME_H
#define TIME_H
class Time
{
friend void printTime(Time &t);
public:
Time(int h, int m, int s)
{
m_iHour = h;
m_iMinute = m;
m_iSecond = s;
}
private:
int m_iHour;
int m_iMinute;
int m_iSecond;
};
#endif // !TIME_H
如此,編譯就能通過了!!
接下實現一個友元成員函數。友元成員函數要求有兩個類才能實現,因此再定義一個Match類