📌  相关文章
📜  在 C++ 类中调用非成员函数

📅  最后修改于: 2022-05-13 01:54:20.197000             🧑  作者: Mango

在 C++ 类中调用非成员函数

成员函数:它是一个可以声明为类成员的函数。它通常在类定义中声明并作用于同一个类的数据成员。它可以访问同一类的私有、公共和受保护的数据成员。该函数声明如下:

想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解语言和 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程
C++
// Given Class
class memberdemo {
private:
    {
    public:
        {
            void check();
        }
  
        // Member Function
        trial::void check();
    }
}


C++
// C++ to illustrate the above concepts
#include 
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;
}


C++
// C++ program to illustrate the
// above approach
#include 
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;
}


非成员函数:在类外声明的函数称为该类的非成员函数。下面是两者的区别:

  • 成员函数可以出现在类体之外(例如,在实现文件中)。但是,遵循这种方法,成员函数必须通过其类的名称进行限定。这是为了标识该函数是特定类的成员。但是非成员函数总是出现在类之外。
  • 成员函数和非成员函数之间的另一个区别是它们在主例程中的调用(或调用)方式。

程序一

C++

// C++ to illustrate the above concepts
#include 
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;
}
输出:
Member function inside class declared
Member function but declared  outside the class
Non-member function

说明:从上面的程序来看,分三种情况:

  • 成员函数在类中声明和定义,并使用类的对象调用。
  • 成员函数在类中声明,但在类外定义,并使用类的对象调用。
  • 在类外声明但在主函数内调用普通函数的非成员函数。

现在,这里出现的问题是是否可以在程序中的成员函数内部调用非成员函数。答案是肯定的。下面是说明如何在成员函数中调用非成员函数的程序:

方案二

C++

// C++ program to illustrate the
// above approach
#include 
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;
}
输出:
120

说明:非成员函数可以在成员函数内部调用,但条件是非成员函数必须在成员函数之前声明。在上面的示例中,遵循相同的方法并且可以调用非成员函数,因此答案是5的阶乘,即120