C++ 友元

简介: 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 的友元,不可以传递使用。

三、示例代码

  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;
}

  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;
}


总结

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

相关文章
|
1月前
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
19 1
|
1月前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
21 0
|
2月前
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
|
4月前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
|
4月前
|
编译器 数据安全/隐私保护 C++
C++一分钟之-属性友元与访问控制
【7月更文挑战第9天】C++中的友元机制允许非成员函数或类访问私有和保护成员,打破了封装性。友元需在类内声明,常见的错误包括忘记声明、过度使用及误解友元的非继承性。要避免错误,应明确声明友元,限制其使用,并理解其局限。示例展示了如何声明和使用友元函数来访问私有数据。谨慎使用友元以保持代码的健壮性和可维护性。
42 1
|
4月前
|
编译器 C++
【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)
📚 C++ 知识点概览:探索类的`static`成员、友元及应用🔍。