Llamar a una función que no es miembro dentro de una clase en C++

Función Miembro: Es una función que puede ser declarada como miembro 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:

C++

// Given Class
class memberdemo {
private:
    {
    public:
        {
            void check();
        }
  
        // Member Function
        trial::void check();
    }
}

Función no miembro: la función que se declara fuera de la clase se conoce como la función no miembro de esa clase. A continuación se muestra la diferencia entre los dos:

  • La función miembro puede aparecer fuera del cuerpo de la clase (por ejemplo, en el archivo de implementación). Pero, si se sigue este enfoque, la función miembro debe ser calificada por el nombre de su clase. Esto es para identificar que esa función es miembro de una clase particular. Pero una función que no es miembro siempre aparece fuera de una clase.
  • Otra diferencia entre las funciones miembro y las funciones no miembro es cómo se llaman (o invocan) en la rutina principal.

Programa 1 :

C++

// C++ to illustrate the above concepts
#include <iostream>
using namespace std;
  
class A {
    int a;
  
public:
    // Member function
    void memberfn(int x)
    {
        a = x;
        cout << "Member function inside"
             << " class declared\n";
    }
  
    // Member function but definition
    // outside the class
    void memberfn2();
};
  
// Member function declared with
// scope resolution operator
void A::memberfn2()
{
    cout << "Member function but declared "
         << " outside the class\n";
}
  
// Non-member function
void nonmemberfn()
{
    cout << "Non-member function\n";
}
  
// Driver Code
int main()
{
    // Object of class A
    A obj;
  
    // Calling Member Function
    obj.memberfn(5);
    obj.memberfn2();
  
    // Calling Non-Member Function
    nonmemberfn();
  
    return 0;
}
Producción:

Member function inside class declared
Member function but declared  outside the class
Non-member function

Explicación: Del programa anterior, hay tres tipos de casos:

  • Una función miembro se declara y define en la clase y se llama usando el objeto de la clase.
  • Una función miembro se declara en la clase pero se define fuera de la clase y se llama usando el objeto de la clase.
  • Una función que no es miembro que se declara fuera de la clase pero se llama función normal dentro de la función principal.

Ahora, aquí surge la pregunta de si es posible llamar a una función no miembro dentro de una función miembro en un programa o no. La respuesta es SÍ . A continuación se muestra el programa para ilustrar cómo llamar a una función que no es miembro dentro de una función miembro:

Programa 2 :

C++

// C++ program to illustrate the
// above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to find the factorial
// of the number N
int fact(int n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return n * fact(n - 1);
}
  
// Class Examples
class example {
    int x;
  
public:
    void set(int x) { this->x = x; }
  
    // Calling the non-member function
    // inside the function of class
    int find() { return fact(x); }
};
  
// Driver Code
int main()
{
    // Object of the class
    example obj;
  
    obj.set(5);
  
    // Calling the member function
    cout << obj.find();
  
    return 0;
}
Producción:

120

Explicación: se puede llamar a una función que no es miembro dentro de una función miembro, pero la condición es que la función que no es miembro debe declararse antes que la función miembro. En el ejemplo anterior, se sigue el mismo enfoque y es posible invocar una función no miembro, por lo que la respuesta es el factorial de 5 , es decir , 120 .

Publicación traducida automáticamente

Artículo escrito por sonidhimanmnnit 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 *