友元函数分为友元全局函数和友元成员函数
先看友元全局函数:
定义一个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类