上篇笔记中对于友元成员函数简单介绍一下结构,本篇主要通过另一实例,让类的封装性更好,编程走起来。程序中定义了两个类time,match。
time.h头文件
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
#include "match.h"
//必须包含这个头文件,下面要用到里面的类
#include<iostream>
using namespace std;
class match;//必须包括这个类的声明,告诉编译器你先用着,我后面会定义
class time
{
friend void match::printTime(time &t);//友元成员函数声明
public:
time(int hour,int min,int sec);
private:
int m_iHour;
int m_iMinute;
int m_iSecond;
};
#endif // TIME_H_INCLUDED
time.cpp源文件
#include"time.h"
//这个文件可以放time类的成员函数定义
time::time(int hour,int min,int sec)//构造函数定义
{
m_iHour=hour;
m_iMinute=min;
m_iSecond=sec;
}
match.h 头文件
#ifndef MATCH_H_INCLUDED
#define MATCH_H_INCLUDED
#include<iostream>
using namespace std;
class time;//必须加这个声明
class match
{
public:
void printTime(time &t);
};
#endif // MATCH_H_INCLUDED
match.cpp源文件
#include"match.h"
#include"time.h"
#include<iostream>
using namespace std;
//这个文件可以定义match类的成员函数定义
void match::printTime(time &t)
{
cout<<t.m_iHour<<':'<<t.m_iMinute<<':'<<t.m_iSecond<<endl;
}
接下来就是主文件main.cpp
#include"stdlib.h"
#include"time.h"
#include"match.h"
int main(void)
{
time t(20,56,34);//使用time类定义
match m;//使用match类定义
m.printTime(t);//用match类的printTime函数访问time类的私有成员
system("pause");
return 0;
}
这个示例可以很清楚看到文件的相互关系,可以看做友元成员函数的模板了。