- 作用:其他类或者函数要访问该类的非公有成员,可以令其他类或者函数成为它的友元(friend)来实现。
- 弊端:类实现封装和隐藏,友元破坏封装和隐藏。可以修改类中私有数据。
- 注意事项
3.1 友元关系不可传递
3.2 友元关系的单向性
3.3 形式和数量没有特别限制 - 友元函数
// 友元.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/**
* 定义Coordinate类
* 友元函数:display
* 数据成员:m_iX、m_iY
*/
class Coordinate
{
// 友元函数
friend void display(Coordinate &coor);
public:
Coordinate(int x, int y)
{
m_iX = x;
m_iY = y;
}
private:
int m_iX;
int m_iY;
};
/**
* display函数用于显示m_iX、m_iY的值
*/
void display(Coordinate &coor)
{
cout << "m_iX---" << coor.m_iX << endl;
cout << "m_iY---" << coor.m_iY << endl;
}
int main(void)
{
// 实例化Coordinate对象
Coordinate coor(2, 3);
// 调用display函数
display(coor);
system("pause");
return 0;
}
5 . 友元类
#include <iostream>
using namespace std;
class Watch;
/**
* 定义Time类
* 数据成员:m_iHour, m_iMinute,m_iSecond
* 成员函数:构造函数
* 友元类:Watch
*/
class Time
{
// 友元类
friend class Watch;
public:
Time(int hour, int min, int sec)
{
m_iHour = hour;
m_iMinute = min;
m_iSecond = sec;
}
public:
int m_iHour;
int m_iMinute;
int m_iSecond;
};
/**
* 定义Watch类
* 数据成员:m_tTime
* 成员函数:构造函数
* display用于显示时间
*/
class Watch
{
public:
// Watch(Time &t) :m_tTime(t); 使用默认拷贝构造函数
Watch(Time &t) :m_tTime(t.m_iHour, t.m_iMinute, t.m_iSecond)
{
}
void display()
{
cout << m_tTime.m_iHour << endl;
cout << m_tTime.m_iMinute << endl;
cout << m_tTime.m_iSecond << endl;
}
public:
Time m_tTime;
};
int main()
{
Time t(6, 30, 20);
Watch w(t);
w.display();
return 0;
}