Función de amigo de clase amiga

Las clases amigas y las funciones amigas son características de C++ que permiten que una clase o función acceda a los miembros privados de otra clase sin destruir la encapsulación. A continuación se presentan los conceptos y el uso de clases amigas y funciones amigas:

1. Clase de amigos:

Una clase amiga significa que en una clase, otras clases pueden declararse como amigas, de modo que la clase amiga declarada pueda acceder a los miembros privados y protegidos de la clase actual. En una clase amiga, todas las funciones miembro tienen acceso a miembros privados de la clase actual.

El siguiente es un código de muestra para una clase amiga:

class ClassA
{
    
    
private:
    int privateMember;

    friend class ClassB;  // 声明ClassB为友元类

public:
    ClassA() : privateMember(0) {
    
    }

    void printPrivateMember()
    {
    
    
        std::cout << privateMember << std::endl;
    }
};

class ClassB
{
    
    
public:
    void modifyPrivateMember(ClassA& obj)
    {
    
    
        obj.privateMember = 10;  // 友元类ClassB可以访问ClassA的私有成员
        obj.printPrivateMember();  // 输出: 10
    }
};

En el ejemplo anterior, la clase ClaseB se declara como una clase amiga de la clase ClaseA, por lo que los objetos de la clase ClaseB pueden acceder al miembro privado miembro privado de la clase ClaseA. En la función modificarPrivateMember, modificamos el miembro privado del objeto obj e imprimimos el valor modificado a través de printPrivateMember.

2. Función de amigo

Función amiga significa que en una clase, se permite declarar otras funciones como funciones amigas, de modo que la función amiga declarada pueda acceder a los miembros privados y protegidos de la clase actual.

Aquí hay un código de muestra para una función amiga:

class ClassA
{
    
    
private:
    int privateMember;

    friend void friendFunction(ClassA& obj);  // 声明friendFunction为友元函数

public:
    ClassA() : privateMember(0) {
    
    }

    void printPrivateMember()
    {
    
    
        std::cout << privateMember << std::endl;
    }
};

void friendFunction(ClassA& obj)
{
    
    
    obj.privateMember = 10;  // 友元函数friendFunction可以访问ClassA的私有成员
    obj.printPrivateMember();  // 输出: 10
}

En el ejemplo anterior, la función friendFunction se declara como una función amiga de la clase ClassA, por lo que la función friendFunction puede acceder al miembro privado privateMember de la clase ClassA. En la función friendFunction, modificamos el miembro privado del objeto obj e imprimimos el valor modificado a través de printPrivateMember.

En resumen, las clases amigas y las funciones amigas proporcionan un mecanismo para autorizar a otras clases o funciones dentro de una clase a acceder a miembros privados. Sin embargo, el mecanismo amigo debe usarse con precaución ya que reduce la encapsulación y aumenta la complejidad del código. Las clases de amigos y las funciones de amigos deben usarse solo cuando realmente necesite acceder a miembros privados y se pueda garantizar la seguridad del acceso.

Supongo que te gusta

Origin blog.csdn.net/neuzhangno/article/details/132212962
Recomendado
Clasificación