📜  C++中的类之间的相互友谊与示例(1)

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

C++中的类之间的相互友谊与示例

在C++中,类之间可以相互协作和交互,这也是OOP的一大特点。有时候,在不同的类之间进行操作或访问私有成员变量或函数是必要的。这就需要使用友元机制来实现。

友元机制是指在某个类中声明另一个类的成员函数或整个类为友元,从而使得友元函数或友元类可以访问当前类的私有成员。

友元函数

在类A中,将类B的成员函数f声明为友元函数,如下所示:

class B;

class A{
    friend void B::f();
};
class B{
    void f(){ //这里可以访问A中的私有成员变量和私有函数 }
};

这里需要注意的是,当A中声明的是B的成员函数时,需要在B类的定义之前先声明一下B类。

友元类

在类A中,将类B声明为友元类,如下所示:

class B{
    friend class A;
};
class A{
    private:
        int x;
    public:
        void f(const B& b){ //函数f可以访问B的私有成员变量 }
};

这里需要注意的是,当A声明为B的友元类时,B类需要在A类定义之前。

示例

下面是一个示例,演示了如何在两个类之间实现友元机制:

#include <iostream>

class B;

class A{
    friend class B;
    private:
        int x;
        void f(){
            std::cout << "A::f()" << std::endl;
        }
    public:
        void g(const B& b);
};
class B{
    friend class A;
    private:
        int y;
        void g(){
            std::cout << "B::g()" << std::endl;
        }
    public:
        void f(const A& a){
            std::cout << "B::f()" << std::endl;
            std::cout << a.x << std::endl; //在B中可以访问A的私有成员变量
            a.f(); //在B中可以访问A的私有函数
        }
};
void A::g(const B& b){
    std::cout << "A::g()" << std::endl;
    std::cout << b.y << std::endl; //在A中可以访问B的私有成员变量
    b.g(); //在A中可以访问B的私有函数
}

int main(){
    A a;
    B b;
    b.f(a); //输出B::f() \n 0 \n A::f()
    a.g(b); //输出A::g() \n 0 \n B::g()
    return 0;
}

上述示例中,A类中声明了B类为友元类,B类中声明了A类为友元类,因此两个类之间可以相互访问私有成员变量和函数。在main函数中,通过调用a.g(b)和b.f(a),演示了如何传递对象并访问对应类的私有成员。