Relación de amigos de C++ cinco preguntas consecutivas, ¿cuántas puedes responder?

¡Acostúmbrate a escribir juntos! Este es el séptimo día de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

1️⃣Prólogo

Puntos de conocimiento en este capítulo:

  • ¿Qué es la amistad?
  • ¿Cuáles son las características de Friends?
  • ¿Por qué el concepto de amigo Yuan?
  • ¿Cuáles son las categorías de amigos?
  • ¿Cómo crear y usar amigos?

2️⃣ Respuesta

✨¿Qué es Amigos?

  • Un amigo es una función ordinaria o clase definida fuera de la clase.
  • Debe declararse dentro del cuerpo de la clase.
  • Para distinguirlo de las funciones miembro de esta clase, prefijaremos la descripción con una palabra clavefriend
  • En pocas palabras, un amigo es una relación.
  • Una función de clase o relación clase-clase

✨¿Cuáles son las características de la Amistad?

  • Los amigos pueden acceder a miembros privados de la clase. (Similar: los amigos son dignos de confianza y pueden revelar parte de su privacidad a sus amigos).
  • Las amistades no se pueden heredar (similar: los amigos de tu papá no son necesariamente tus amigos)
  • Las amistades son unidireccionales (similar: la clase A es amiga de la clase B, pero B no es necesariamente amiga de A)
  • Las relaciones de amistad no se pueden pasar (de manera similar: es decir, B es amigo de A, C es amigo de B, pero C no es necesariamente amigo de A).

✨¿Por qué el concepto de Amistad?

  • Sabemos que las clases tienen encapsulación, es decir, ocultación de datos.
  • Solo las funciones miembro de la clase pueden acceder a los miembros privados de la clase.
  • Otras funciones en el archivo fuente no pueden acceder a miembros privados.
  • Luego , generalmente configuraremos algunas interfaces públicas para abrirlas al mundo exterior.
  • Es decir, las funciones que no son miembros pueden acceder a los miembros públicos de la clase.
  • Pero a veces, el acceso a clases puede ser un poco rígido en algunas aplicaciones.
  • Si los miembros de datos se definen como públicos, se destruye la función oculta.
  • Así que existe el concepto de amigos .
  • A los amigos se les otorga acceso a partes privadas de la clase desde el exterior (es decir, "puertas traseras" algunas funciones fuera de la clase)
  • Esto también aumenta la flexibilidad de la interfaz pública de la clase.
  • Pero debe tenerse en cuenta que los amigos destruyen la operatividad general de la clase y también destruyen la encapsulación de la clase.
  • Así que tenemos que elegir usar amigos.

✨¿Cuáles son las categorías de Amigos?

Clasificación:

  1. clase amiga
  2. funcion amigo

友元关系可以是一个函数,该函数被称为友元函数。

友元也可以是一个类,该类被称为友元类。


✨如何创建和使用友元?

关键字:frend

我们需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend

下面着重看看友元类以及友元函数

3️⃣友元类

首先我们定义一个类:

imagen.png

这个myBuilding类就相当于我的家,现在定义另一个类,是我的朋友

并且我的朋友想访问我家的客厅和卧室

imagen.png

  • 很显然,不可访问!

  • 这是因为,在myBuilding这个类中,我的卧室是一个私有的,外部无法访问。

  • 但是如果我们在myBuilding类中声明myFriend这个类是友元关系的,即friend class myFriend;

  • 那么此时myFriend这个类就是一个友元类,它可以访问类似私有成员。

所以完整代码如下:

imagen.png

运行结果为:

朋友在访问:我的客厅
朋友在访问:我的卧室
复制代码

4️⃣友元函数

一旦我们将一个类声明为另一个类的友元,就意味着这个类的所有成员函数都是另一个类的友元函数,即都可以访问另一个类中私有成员或保护成员。

但有时候我们并不想让类的所有成员都能访问另一个类的私有成员,那么此时我们可以将类的部分成员函数声明为友元函数,这样就只有友元函数可以访问另一个类的私有成员, 而不是整个类都能访问另一个类的私有成员。

因此总结的说,友元函数就是能够访问另一个类的私有成员的一个函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。

Por ejemplo, en myBuildingesta clase, declaramos que visit1es una función amiga, por lo que visit1podemos acceder a myBuildinglos miembros privados .m_BedRoom

imagen.png

Y en la myFriendclase, visit2es imposible myBuildingacceder a los miembros privados en

imagen.png

Entonces, en la función principal, algo como esto:

imagen.png

5️⃣Escribir al final

Bueno, después de leer este artículo, creo que has entendido la relación entre amigos, ¡bienvenido al área de comentarios para discutir juntos!

Supongo que te gusta

Origin juejin.im/post/7086993951529369614
Recomendado
Clasificación