文档介绍:第6章面向对象的妥协
授课内容
封装的破坏——友元
对象机制的破坏——静态成员
封装的破坏——友元
封装的破坏——友元
友元可以访问与其有好友关系的类中的任何成员。
友元
友元函数
友元类
如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的普通函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数。友元函数可以访问这个类中的任何成员。
如何将普通函数声明为友元函数呢?看下面这个简单的例子:
§ 封装的破坏——友元
友元函数
【例6-1】友元普通函数。
#include <iostream>
using namespace std;
class Clock //声明Clock类
{public:
Clock(int,int,int);
friend void display(Clock &);
private:
int hour;
int minute;
int second;
};
§ 友元函数
【例6-1】友元普通函数。
#include <iostream>
using namespace std;
class Clock //声明Clock类
{public:
Clock(int,int,int);
friend void display(Clock &);
private:
int hour;
int minute;
int second;
};
【例6-1】友元普通函数。
Clock::Clock(int h,int m,int s) //构造函数
{ hour=h; minute=m; second=s; }
//这是友元函数,形参t是Clock类对象的引用
void display(Clock& t)
{
cout<<<<":"<<<<":"<<<<endl;
}
int main()
{ Clock t(10,13,56);
display(t); //调用display函数,实参t是Clock类对象
return 0;
}
§ 友元函数
程序运行结果如下:
10:13:56
cout<<hour<<":"<<minute<<":"<<second<<endl;
注意
§ 友元函数
#include <iostream>
using namespace std;
class Date; //对Date类的提前引用声明
class Clock //声明Clock类
{public:
Clock(int,int,int);
void display(Date &);
private:
int hour, minute, second;
};
【例6-2】友元成员函数。
class Date //声明Date类
{public:
Date(int,int,int);
friend void Clock::display(Date &);
private:
int month;
int day;
int year;
};
§ 友元函数
Clock::Clock(int h,int m,int s) // Clock类的构造函数
{ hour=h; minute=m; second=s; }
void Clock::display(Date &dd)
{cout<<<<"/"<<<<"/"<<<<endl;
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Date::Date(int m,int d,int y) // Date类的构造函数
{ month=m; day=d; year=y;}
§ 友元函数