C++友元函数
1、友元函数介绍:
1.1为什么使用友元函数?
在类之间实现数据共享,减少系统开销,提高效率。即一个类可以无限制的存取另一个类的成员。例如:如果类A是类B的友元函数,那么类A中该函数是类B的友元函数。也就是说A的成员函数可以直接访问B类的私有变量、公有成员和公有成员。
1.2友元函数的优缺点?
优点:提高效率,表达简单、清晰。
缺点:破坏了封装和数据隐藏,导致程序的可维护性变差。
2、友元函数图解:
func()函数是该类的外部函数,友元函数能够访问friend所在类(Two)的所有对象的私有成员、公有成员和保护成员。
3、友元函数的使用
3.1类本身的友元函数
目的:使普通函数能够访问类的成员
声明:friend + 普通函数
实现位置:类内或类外
调用:直接调用
代码:
class Two
{
friend void Print(Const Two& obj);
};
void Print(Const Two& obj)
{
//函数体
}
void main()
{
Two obj;
Print(obj);//直接调用
}
3.2将成员函数用作友元
目的:是类One的一个成员函数称为类Two的友元,使该函数直接访问Two的私有变量
声明:friend + 成员函数的声明
声明位置:声明在公有中
调用:先声明One对象one ---- 使用one调用个自己的成员函数
class One{
void func(Two&); //声明本类的成员函数,参数为Two类的引用
}
class Two
{
friend void One::func(Two&);
};
void main()
{
One Obj1(5);
Two Obj2(8);
Obj1.func(Obj2);
}
3.3将一个类说明为另一个类的友元
目的:使用单个声明One类是Two类的友元,则One 这个类的成员函数均具有友元函数的性能。
声明:friend + 类名
声明位置:另一个类的公有或私有均可
class Two{
private:
int y;
public:
friend class One; //声明One为Two的友元
}
class One
{
private:
int x;
public:
One(int a,Two&r,int b)
{
x=a;
r.y =b;
}
void Display(Two&r);
};
void One::Display(Two&r)
{
cout<<x<<""<<r.y<<endl;
}
void main()
{
Two Obj2;
One Obj1(2,Obj2,5);
Obj1.Display(Obj2);//直接调用函数
}
4、友元函数总结:
4.1友元函数不是成员函数
4.2成员函数有this指针,而友元函数没有this指针
4.3友元函数不能被传递,也不具有交换性

浙公网安备 33010602011771号