友元函数
时间:2014-06-20 09:05:42
收藏:0
阅读:302
在介绍友元函数前,先介绍一些概念
公用(public)的成员:在类外可以访问
私有(private)成员:只有本类中的函数可以访问
友元(friend):友元可以访问与其有好友关系的类中的私有成员——有限制的共享
友元包括友元函数和友元类
友元函数:如果在本类以外的其它地方定义的函数,在类体中用friend进行声明,此函数称为类的友元函数,友元函数可以访问这个类中的私有成员
友元类:将一个类声明为另一个类的友元类,友元类B中的所有函数都是A类的友元函数,可以访问A类的所有成员
友元函数程序实例:
#include <iostream>
using namespace std;
class Time
{
public:
//构造函数
Time(int h, int m, int s);
//声明display函数为Time类的友元函数
friend void display(Time &);
private:
int hour;
int minute;
int sec;
};
//构造函数
Time::Time(int h, int m, int s)
{
hour = h;
minute = m;
sec = s;
}
//友元函数,t是Time类对象的引用
void display(Time &t)
{
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
void main1()
{
Time t1(10,13,56);
display(t1);
system("pause");
}
执行结果:
友元类程序实例:
#include <iostream>
using namespace std;
class Date;
class Time
{
public:
//使用初始化表初始化数据成员
Time(int h, int m, int s):hour(h),minute(m),sec(s){}
void display(Date &);
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
//使用初始化表初始化Date类
Date(int m, int d, int y):month(m),day(d),year(y){}
friend void Time::display(Date &);
private:
int month;
int day;
int year;
};
void Time::display(Date & d)
{
cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
void main()
{
Time t1(10,13,56);
Date d1(12,25,2004);
t1.display(d1);
system("pause");
}
程序执行结果:
友元的性质:
友元关系是单向而不是双向的
友元关系不能传递
除非确有必要,一般并不把整个类声明为友元类
使用友元的优势:有助于数据共享,能提高程序的效率
使用友元的劣势:友元可以访问其他类中的私有成员,是对封装原则的破坏,不利于信息隐藏
评论(0)