📜  C++中友元函数和成员函数的区别(1)

📅  最后修改于: 2023-12-03 15:14:02.022000             🧑  作者: Mango

C++中友元函数和成员函数的区别

在C++中,我们可以使用友元函数和成员函数访问类中的私有成员变量和私有成员函数。但是这两种方法有一些区别。

友元函数

友元函数是一种定义在类外部的普通函数,但是它可以访问类中的私有成员变量和私有成员函数。我们可以使用关键字friend将其声明为类的友元函数。

下面是一个示例:

class MyClass
{
private:
    int myVar;
public:
    friend void myFriend(MyClass& obj);
};

void myFriend(MyClass& obj)
{
    obj.myVar = 42;
}

在上面的代码中,我们声明了一个MyClass类,并且声明了一个myFriend函数作为它的友元函数。myFriend函数可以访问MyClass中的私有变量myVar

需要注意的是,友元函数并不是类的成员函数,所以它没有this指针。因此,我们需要将MyClass对象作为参数传递给myFriend函数来访问私有成员变量。

成员函数

成员函数是定义在类内部的函数,它可以直接访问类中的成员变量和成员函数。它们也可以访问私有成员变量和私有成员函数。

下面是一个示例:

class MyClass
{
private:
    int myVar;
public:
    void setMyVar(int val)
    {
        myVar = val;
    }
    int getMyVar()
    {
        return myVar;
    }
};

在上面的代码中,我们定义了一个setMyVar函数和一个getMyVar函数。setMyVar函数用来设置私有成员变量myVar的值,而getMyVar函数用来获取私有成员变量myVar的值。

需要注意的是,成员函数是类的一部分,它们可以直接访问类的成员变量和成员函数。

区别

友元函数和成员函数都可以访问私有成员变量和私有成员函数。但是,它们之间存在一些区别:

  • 成员函数是类的一部分,所以它们可以直接访问类的成员变量和成员函数。友元函数并不是类的一部分,所以它们无法访问类的成员变量和成员函数。
  • 友元函数需要在类的外部进行声明和定义。成员函数在类的内部定义。
  • 友元函数不需要使用类的对象来访问成员变量和成员函数。成员函数需要使用类的对象来访问成员变量和成员函数。

因此,在设计类的时候,需要根据实际情况来选择使用友元函数还是成员函数,以实现最好的封装和代码可读性。