Diferencia entre función amigo y función miembro en C++

Función de amigo : es básicamente una función que se utiliza para acceder a todos los miembros privados y protegidos de las clases. Se considera como una función no miembro de la clase y es declarada por la clase que otorga acceso. Esta función tiene como prefijo la palabra clave amigo en la declaración, como se muestra a continuación:

Definición de clase usando la función de amigo:

C++

class freetrial {
private:
    {
    public:
        {
            friend void check();
        }
        void check();
    }
}

C++

// Example: Find the largest of two numbers using Friend Function
 
#include<iostream>
using namespace std;
 
class Largest
{
    int a,b,m;
    public:
        void set_data();
        friend void find_max(Largest);       
};
 
void Largest::set_data()
{
    cout<<"Enter the First No:";
    cin>>a;
    cout<<"Enter the Second No:";
    cin>>b;
}
 
void find_max(Largest t)
{
    if(t.a>t.b)
        t.m=t.a;
    else
        t.m=t.b;
         
        cout<<"Maximum Number is\t"<<t.m;
}
 
main()
{
    Largest l;
    l.set_data();
    find_max(l);
    return 0;
}

Producción

Enter the First No:25
Enter the Second No:96
Maximum Number is    96

Función miembro: es básicamente una función que se puede declarar como miembros de una clase. Por lo general, se declara dentro de la definición de clase y funciona en miembros de datos de la misma clase. Puede tener acceso a miembros de datos privados, públicos y protegidos de la misma clase. Esta función se declara como se muestra a continuación:

Definición de clase usando la función miembro:

C++

class freetrial {
private:
    {
    public:
        {
            void check();
        }
        trial::void check();
    }
}

C++

// Example: defining member function without argument inside  class
 
#include<iostream>
using namespace std;
 
class Item
{
    int itemId,quantity;
    double price;
    public:
        void setValue()
        {
            cout<<"Enter the Item Id:";
            cin>>itemId;
            cout<<"Enter the Item Price:";
            cin>>price;
            cout<<"Enter the Quantity:";
            cin>>quantity;
        }
        void display()
        {
            cout<<endl<<itemId<<"\t"<<price<<"\t"<<quantity;
        }
         
};
 
main()
{
    Item _item;
    _item.setValue();
    _item.display();
    return 0;
}

Producción

Enter the Item Id: 123
123
Enter the Item Price:25
Enter the Quantity:3
123    25    3

C++

// Example: defining member function without argument outside  class
 
#include<iostream>
using namespace std;
 
class Item
{
    int itemId,quantity;
    double price;
    public:
        void setValue();
        void display();
};
 
void Item::setValue()
{
    cout<<"Enter the Item Id:";
    cin>>itemId;
    cout<<"Enter the Item Price:";
    cin>>price;
    cout<<"Enter the Quantity:";
    cin>>quantity;
}
 
void Item::display()
{
    cout<<endl<<itemId<<"\t"<<price<<"\t"<<quantity;
}
         
main()
{
    Item _item;
    _item.setValue();
    _item.display();
    return 0;
}

Producción

Enter the Item Id:1234
Enter the Item Price:25
Enter the Quantity:4

Diferencia tabular entre la función amigo y la función miembro:

Función amigo

Función miembro

Se puede declarar en cualquier número de clases utilizando la palabra clave amigo. Solo se puede declarar en el ámbito privado, público o protegido de una clase en particular.
Esta función tiene acceso a todos los miembros privados y protegidos de las clases. Esta función tiene acceso a miembros privados y protegidos de la misma clase.
Uno puede llamar a la función amigo en la función principal sin necesidad de objetar. Uno tiene que crear un objeto de la misma clase para llamar a la función miembro de la clase.
La palabra clave Amigo generalmente se usa para declarar una función como función amiga. En estos, no se requiere tal palabra clave.
No se puede llamar usando, se puede invocar como una función normal sin usar un objeto, definido fuera del alcance de la clase, etc. Tiene su propio prototipo dentro de la definición de la clase, opera sobre cualquier objeto de la clase, tiene acceso a todos los miembros de la clase, etc.
Este método proporciona acceso a los miembros de datos proporcionados y protegidos. Este método proporciona modularidad a un programa.
Generalmente se usa para modificar o cambiar miembros de datos privados y protegidos de la clase. Generalmente se utiliza para mejorar la reutilización del código y hacer que el código sea mantenible.
También proporciona funcionalidad adicional que se mantiene fuera de la clase, proporciona funciones que necesitan datos, permite compartir información de clase privada por parte de funciones que no son miembros, etc. Permite el acceso a datos privados internos, se puede usar un protocolo o interfaz general, solo para fines internos y operaciones no publicables, como la inicialización y los resultados intermedios de la computación.
En este, la operación binaria suele tomar dos parámetros explícitos. En esto, las operaciones binarias generalmente toman solo un parámetro explícito.
El operador unario toma al menos un parámetro explícito. El operador unario no toma ningún parámetro explícito.
No es parte de la clase. Es una parte de la definición de clase y es invocado por un objeto particular.

Publicación traducida automáticamente

Artículo escrito por madhurihammad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *