C++中的友元是什么,如何使用它们?

我想了解一下C++中的友元是什么,以及如何使用它们。我知道在C++中,友元是一个被授权访问类的私有成员的非成员函数或类。相对于继承,友元在类之间的关系更加紧密,但是使用不当会破坏封装性。我需要一些例子来了解友元函数和友元类是如何声明和使用的,以及在什么情况下使用友元才是最合适的选择。

提问时间:2023-07-13 00:01:22 编辑时间:2023-07-13 00:01:24 提问者: 竹林之谣
  • 灵魂逐梦
    1

    友元是一个被授权访问类的私有成员的非成员函数或类。在C++中,通过在类定义中使用关键字"friend"来声明友元函数或友元类。友元可以访问类的私有成员,但是不会受到类的访问权限限制。通常情况下,只有当需要在多个类之间共享某些数据时,才需要使用友元。以下是友元函数和友元类的声明和使用示例:

    友元函数的声明和使用示例:

    class MyClass {
    private:
        int a;
    
        friend int add(MyClass obj1, MyClass obj2);
    
    public:
        MyClass(int x) {
            a = x;
        }
    };
    
    int add(MyClass obj1, MyClass obj2) {
        return obj1.a + obj2.a;
    }
    
    int main() {
        MyClass obj1(5);
        MyClass obj2(10);
    
        cout << "Sum: " << add(obj1, obj2) << endl;
        return 0;
    }
    

    友元类的声明和使用示例:

    class MyClass {
    private:
        int a;
    
        friend class MyFriend;
    
    public:
        MyClass(int x) {
            a = x;
        }
    };
    
    class MyFriend {
    public:
        void printA(MyClass obj) {
            cout << "A: " << obj.a << endl;
        }
    };
    
    int main() {
        MyClass obj(5);
    
        MyFriend friendObj;
        friendObj.printA(obj);
    
        return 0;
    }
    

    需要注意的是,过度使用友元会破坏类的封装性和安全性,应慎重使用。只有在确实需要访问类的私有成员时,才应该使用友元。

    回答时间:2023-07-13 00:01:27