© whiteMocca/Shutterstock.com

En el mundo de la programación, hay muchas opciones de lenguajes para usar. Muchos de estos se conocen como lenguajes de programación orientados a objetos, que se centran en diseñar programas en torno a objetos y cómo interactúan entre sí.

Con este fin, las propiedades de los objetos se definen por clases y se utilizan para contener datos, así como código para operar con esos datos.

A Un ejemplo popular de un lenguaje orientado a objetos es C++, y gran parte de su uso involucra la función de amigo y las clases de amigos. En este artículo, veremos qué son una función y una clase de amigo, y cómo se usan con C++.

¿Qué es la función y la clase de amigo?

Ocultar o encapsular datos es un principio clave dentro de la programación orientada a objetos, generalmente para proporcionar una interfaz más fácil de usar para interactuar o restringir el acceso a funciones a ciertos bloques de código. Sin embargo, a veces es posible que desee que una función externa acceda al código dentro de una determinada clase.

Aquí es donde entran en juego la palabra clave amigo y la función amigo. Una función de amigo puede acceder a datos protegidos y privados y puede declararse usando la palabra clave amigo. Como tal, la función amigo se puede utilizar para operar en objetos de una o más clases.

Vale la pena señalar que una función amiga puede ser una función miembro (asociada con una clase en particular) o una función global (definida fuera de cualquier clase).

Las funciones de amigos son funciones externas normales a las que se otorgan privilegios de acceso especiales.

©gonin/Shutterstock.com

Una clase amiga funciona de manera similar, pero, dado que toda la clase es”amiga”de otra clase, todas las funciones miembro de la clase amiga tienen acceso a todas las miembros de la otra clase.

En otras palabras, una función amiga se declara como amiga de una clase en particular, mientras que una clase amiga se define dentro de la clase con la que desea que sea amiga.

Cómo Use la función de amigo

Ahora que hemos cubierto qué son las funciones y clases de amigos, es hora de ver un ejemplo de cómo se puede implementar la función de amigo:

class MyClass { private: int X; public: amigo void myFriendFunction(MyClass& obj) { obj.x=10; } }

Aquí, hemos definido la función”myFriendFunction”como un amigo de la clase”MyClass”. Como tal, la función se declara dentro de la definición de clase y puede acceder al miembro privado de esta clase,”x”.

Cómo usar una función de amigo global

Si queremos declarar la función amiga como una función global, tenemos que definirla fuera de la definición de clase. Esto se puede hacer de manera muy similar al ejemplo anterior:

class MyClass { private: int x; público: amigo anula mi GlobalFriendFunction(MyClass& obj); }; void myGlobalFriendFunction(MyClass& obj) { obj.x=10; }

El código es esencialmente el mismo, excepto que la función de amigo se define fuera de la clase. Como tal, esta función amiga puede ser potencialmente amiga de cualquier clase, ya que no se ha definido dentro de una clase.

Cómo declarar una función como amiga de varias clases

No tienes que limitarte a hacer una función amigable para una clase. Las funciones pueden ser amigas de varias clases. Vea cómo hacer esto a continuación:

class MyClass1; clase MiClase2 { privado: int y; public: amigo void myFriendFunction(MyClass1&, MyClass2&); }; clase MiClase1 { privado: int x; public: amigo void myFriendFunction(MyClass1&, MyClass2&); }; void myFriendFunction(MyClass1& obj1, MyClass2& obj2) { obj1.x=10; obj2.y=20; }

Aquí hemos definido dos clases,”MyClass1″y”MyClass2″, así como la función global”myFriendFunction”. La función amigo se declara dentro de las definiciones de ambas clases y, por lo tanto, puede modificar los miembros privados de ambos objetos. A saber, los miembros”x”e”y”. Tenga en cuenta que la primera línea se usa para reenviar declarar”MyClass1″.

Una clase amiga puede acceder a los miembros privados y protegidos de la clase en la que se declara amigo.

©Yurchanka Siarhei/Shutterstock.com

Esto le permite al compilador conocer la existencia de”MyClass1″sin definirlo primero. Esto se hace para que se considere “MyClass1” al momento de compilar la declaración de la función friend, evitando errores de compilación.

Cómo usar una clase Friend

En el ejemplo anterior, definimos la “myFriendFunction” como amiga de la clase “MyClass”. El acceso y la modificación del miembro privado”x”se otorgan a la clase amiga.

Sin embargo, una clase amiga se ve un poco diferente. He aquí un ejemplo:

class MyClass { private: int x; público: clase amiga MyFriendClass; }; class MyFriendClass { public: void myFunction(MyClass& obj) { obj.x=10; } }

En este caso, la clase”MyFriendClass”se designa como clase amiga de la clase”MyClass”. Cada función interna puede acceder al miembro privado”x”, como la función miembro”myFunction”.

Conclusión

La palabra clave amigo se puede usar para declarar una función amiga. Esto permite que la función acceda a miembros privados de una clase. También puede usar la palabra clave amigo para declarar una clase amiga. Esto significa que todas las funciones miembro de esta clase pueden acceder a la clase amiga.

La palabra clave amigo es útil cuando queremos otorgar acceso a miembros específicos de una clase a una función o clase sin revelar todos estos miembros protegidos a la interfaz pública. En general, la función debe usarse solo cuando sea necesario. Esto es para ayudar a mantener los principios de ocultación y encapsulación de datos de la programación orientada a objetos.

A continuación

Función Friend y clase Friend en C++, preguntas frecuentes explicadas (Preguntas frecuentes) 

¿Qué es una función de amigo?

Una función de amigo es una función a la que se le ha otorgado acceso a los miembros privados de una clase usando la palabra clave amigo.

¿Qué es una clase amiga?

Una clase amiga funciona de manera similar, excepto que todas las funciones de miembro de la clase amiga pueden acceder a los miembros protegidos de la otra clase.

¿La función amigo es miembro o función global?

Puede ser cualquiera. Si define la función de amigo fuera de la clase, es una función global y potencialmente puede acceder a otras clases. Si está definido dentro de la definición de clase, solo puede acceder a los miembros de esa clase.

¿Por qué usaría una función o clase amiga?

Ellos’son útiles para otorgar acceso a miembros de clases privadas o protegidas, sin exponer toda esta información a la interfaz pública. Esto es importante para mantener la ocultación y encapsulación de datos.

¿Puede una función amiga acceder a los miembros de una subclase?

No, si está definida dentro de una clase base entonces no puede acceder a los miembros de las subclases.

¿La función de amigo afecta el rendimiento?

No, la función de amigo solo afecta la visibilidad de la clase privada miembros.

¿Se puede heredar una clase amiga?

Sí, se pueden heredar clases amigas.

By Henry Taylor

Trabajo como desarrollador back-end. Algunos me habréis visto en la conferencia de desarrolladores. Últimamente he estado trabajando en un proyecto de código abierto.