📅  最后修改于: 2023-12-03 14:39:58.783000             🧑  作者: Mango
在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),演示了如何传递对象并访问对应类的私有成员。