1.友元函数
友元函数一般用在类中,但是并不属于成员函数,只是在类中声明,在类外定义。如果在类外定义一个函数的话,当没有在类中声明其为友元函数,就不能调用它访问类中的私有成员变量,若定义了就可以调用类中的私有变量。
class time
{
public:
void settime(int,int,int);
void gettime();
private:
int hour;
int minute;
int seconds;
};
void time::settime(int h,int m,int s)
{
hour=h;
minute=m;
seconds=s;
}
class data
{
public:
friend void display(data &d);
private:
int day;
int month;
int year;
}
void time::gettime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
void display(data &d) //与私有成员的定义不同,不需要指出所属的类
{
day=d.day;//可以引用类中的私有 成员啦(友元函数不能直接访问类的成员,只能访问对象成员然后间接得到私有成员)
month=d.month;
year=d.year;
}
int main()
{
time T;
data D;
T.settime(12,30,00);
display(D);//友元函数的调用和成员函数不同,按普通函数方式调用
return 0;
}
2几点总结
成员函数有this指针,友元函数没有
成员函数中,可以直接访问该类的对象 的私有成员(和拷贝函数一样)。一般实例是不能访问访问私有成员的。这样可以
class time
{
public:
void settime(int,int,int);
void gettime();
void settime(time &t)
{
hour=t.hour;
minute=t.minute;
second=t.second;
}
private:
int hour;
int minute;
int seconds;
};
类的成员函数,类的构造函数,友元函数,可以访问作为参数的同类型对象的私有成员。