Volver a la página principal
sábado 6 julio 2024
15

Cómo usar friend en C++

En C++, la palabra clave friend se utiliza para otorgar acceso especial a los miembros privados y protegidos de una clase a otra clase o función. Esto permite que ciertas funciones o clases accedan a datos internos de una clase sin tener que usar métodos públicos. Aunque esta característica debe ser utilizada con cuidado debido a sus implicaciones de diseño y seguridad, puede ser muy útil en situaciones específicas.

¿Qué es friend?

La palabra clave friend en C++ permite que una función o clase tenga acceso a los miembros privados y protegidos de otra clase. Esto es útil cuando se necesita que funciones externas a la clase tengan acceso a sus datos internos sin tener que usar métodos de acceso (getters) y modificación (setters) explícitos.

Funciones Amigas

Una función amiga puede acceder a los miembros privados y protegidos de la clase en la que está declarada como amiga. Aquí hay un ejemplo básico para ilustrar su uso:

#include <iostream>
using namespace std;

class Caja {
private:
    int ancho;
public:
    Caja(int a) : ancho(a) {}
    
    // Declaración de la función amiga
    friend void mostrarAncho(Caja& caja);
};

// Definición de la función amiga
void mostrarAncho(Caja& caja) {
    cout << "El ancho de la caja es: " << caja.ancho << endl;
}

int main() {
    Caja caja(10);
    mostrarAncho(caja);
    return 0;
}

En este ejemplo, la función mostrarAncho es declarada como amiga de la clase Caja. Esto le permite acceder al miembro privado ancho de la clase Caja.

Clases Amigas

Una clase amiga puede acceder a todos los miembros privados y protegidos de otra clase. Aquí hay un ejemplo:

#include <iostream>
using namespace std;

class B; // Forward declaration

class A {
private:
    int datoA;
public:
    A(int d) : datoA(d) {}
    
    // Declaración de la clase amiga
    friend class B;
};

class B {
public:
    void mostrarDatoA(A& a) {
        cout << "El dato de A es: " << a.datoA << endl;
    }
};

int main() {
    A a(100);
    B b;
    b.mostrarDatoA(a);
    return 0;
}

En este ejemplo, la clase B es declarada como amiga de la clase A. Esto permite que cualquier miembro de B acceda a los miembros privados de A.

Ventajas y Desventajas del Uso de friend

Ventajas

1. Facilita el acceso directo: Permite que funciones y clases tengan acceso directo a los miembros privados de una clase, lo cual puede simplificar el código.

2. Mejora el encapsulamiento: A veces, es más seguro y conveniente que ciertas funciones o clases específicas tengan acceso a los miembros privados, en lugar de hacerlos públicos.

Desventajas

1. Rompe la encapsulación: El uso de friend puede romper el principio de encapsulación de datos, que es uno de los pilares de la programación orientada a objetos.

2. Dificulta el mantenimiento: Si se abusa del uso de friend, puede hacer que el código sea más difícil de mantener y entender.

3. Acoplamiento estrecho: Las funciones y clases amigas están estrechamente acopladas, lo cual puede hacer que los cambios en una clase afecten a las amigas.

Buenas Prácticas

1. Usar con moderación: Utiliza friend solo cuando sea absolutamente necesario. Evita su uso excesivo.

2. Documentar: Siempre documenta por qué una función o clase se declara como amiga. Esto ayuda a otros desarrolladores a entender el diseño del sistema.

3. Diseño cuidadoso: Considera si hay una manera de evitar el uso de friend mediante un mejor diseño de clases y métodos.

Conclusión

La palabra clave friend en C++ es una herramienta poderosa que puede ser utilizada para permitir el acceso a los miembros privados de una clase desde otra clase o función. Sin embargo, debe usarse con cuidado para no comprometer la integridad y mantenibilidad del código. Con una comprensión adecuada y un uso moderado, friend puede ser una característica muy útil en la programación orientada a objetos en C++.

Etiquetas:
cpp
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer