C++ 友元

文章目录

  • 前言
  • 一、什么是友元
  • 二、友元的特性
  • 三、示例代码
  • 总结

前言

在C++编程中,友元(friend)是一种特殊的关系,允许一个类或函数访问另一个类中的私有成员。


一、什么是友元

1.友元 的定义:

友元在C++中可以被用于类和函数。对于类来说,可以创建一个友元类或友元函数。友元类可以 直接访问其它类的私有成员 ,而友元函数可以访问某一个类的私有成员。

2.友元 的声明:

在类定义中,可以使用 friend 关键字声明一个类或函数为友元。声明通常放在类的访问说明符(public、private、protected)之间。

友元 关系发生在函数与类之间 或者 类与类 之间。

class MyClass {
private:
  int privateData;
public:
  friend class FriendClass; // 友元类声明
  friend void FriendFunction(); // 友元函数声明
};

二、友元的特性

1.局限性

友元的使用应该谨慎,并且遵循信息隐藏的原则。友元的目的是提供更灵活的访问权限,但也可能破坏封装性和安全性。应该尽量避免滥用友元,只在必要的情况下使用。

2.友元 关系的传递性

友元 关系不能传递,友元 关系 是单向的。 即使一个类 A 是类 B 的友元,类 B 的友元类不会自动成为类 A 的友元。
如果 A 是 B 的友元, B 是 C 的友元,则 C 不是 A 的友元,不可以传递使用。
C++ 友元_第1张图片

三、示例代码

  1. 示例一:
    友元函数允许函数访问类中的私有成员。被声明为友元的函数可以直接访问友元类的私有成员。
class Point
{
	int a, b;						// a,b 是类的私有成员
public:
	Point(int a, int b)
	{
		this->a = a;
		this->b = b;
	}

	friend void fun(Point&p);			//声明 友元 函数
};

void fun(Point& p)
{
	printf("a = %d, b = %d\n",p.a,p.b);			//在 fun 函数内可直接访问 类的私有成员
}

int main(void)
{
	Point p(1,2);
	fun(p);
	return 0;
}

C++ 友元_第2张图片

  1. 示例 二
    友元类允许一个类访问另一个类中的私有成员。被声明为友元的类可以直接访问友元类的私有成员。
class name1
{
	const char* n;
public:
	name1(const char* n)
	{
		this->n = n;
	}
	friend class name2;				// 声明 友元 类
};

class name2
{
public:
	void GetName1(name1& name)				// 打印 name1 类的名字
	{
		printf("name1 ==> %s\n", name.n);		// 访问 私有成员
	}
};

int main(void)
{
	name1 n1("hello");
	name2 n2;
	n2.GetName1(n1);

	return 0;
}

C++ 友元_第3张图片


总结

友元是一个强大的特性,但应谨慎使用。正确理解和使用友元关系,可以在需要的时候提供更灵活的访问权限,同时保持良好的封装性和安全性。在设计类和函数时,考虑友元是否需要,并仔细评估其对程序结构的影响。

你可能感兴趣的:(C++最强教程,c++,java,开发语言,友元)