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友元函数不能被传递,也不具有交换性






原文地址:https://www.cnblogs.com/zsswpb/p/6329428.html