一个类的友元函数和友元类可以访问该类的所有成员(包括私有),是比继承还要亲密的关系。。亲不如友系列。
另外,友元是单向的,而且没有传递性,比如b是a的友元(a把b当朋友),c是b的友元(b把c当朋友),即a->b->c,那么b可以访问a的所有成员,c可以访问b的所有成员,反过来却不行(一厢情愿),a和c也没有任何关系(朋友的朋友不是我的朋友)。
以下为例:
Time.h
#ifndef TIME_H
#define TIME_H
//值得注意的一点是:Mtach是Time的友元类,但Time不是Match的友元类,友元是单向的。而且友元没有传递性
class Match;//要声明这一句,因为下文提到了类Match
//上一句和#include"Match.h"的区别在于,上句只是声明了一下以便于下文使用到类Match的字眼,但是无法实例化Match对象也不能调用Match的成员。而include就可以。
class Time
{
friend Match;
public:
Time(int hour,int minute,int second);
private:
void printTime();
int m_iHour,m_iMinute,m_iSecond;
};
#endif
Time.cpp
#include"Time.h"
#include<iostream