友元关系
1.什么是友元关系
声明友元关系后可以让友元类访问到自己protected和private的属性和方法。定义友元类的语法:
firend class ****
这句话可以放在任何地方,但必须要在类里面。
2.一些细节问题
我自己写了一个例子来测试友元特性,注意看代码中的注释:
#include <iostream>
//在这里最好写上声明,因为A和B的类中的方法test_visit存在交叉访问,如果先定义A,那么A就不能访问B,所以要先在这里生声明好两个类,
//告诉编译器耐心点,后面有B的定义。
class A;
class B;
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------
//这里写上A的定义和A的构造函数:
class A
{
friend class B;
public:
int a_pub;
void test_visit(B *);
A();
protected:
int a_pri;
};
A::A()
{
a_pub = 1;
a_pri = 2;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------
//这里写上B的定义和B的构造函数:
class B
{
friend class A; //注意友元声明是单向的!所以这里还要再声明一次,让A也能访问到B中的private属性
public:
int b_pub;
void test_visit(A *);
B();
private:
int b_pri;
};
B::B()
{
b_pub = 3;
b_pri = 4;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------
//这里是A和B的方法定义。因为这两个方法会交叉调用,所以不能写在自己类定义的后面,要等A和B都定义好了,再来写这两个定义。
void A :: test_visit(B *pb)
{
std::cout << pb->b_pri << std::endl;
}
void B :: test_visit(A *pa)
{
std::cout << pa->a_pri << std::endl;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------
int main()
{
B b;
A a;
b.test_visit(&a);
a.test_visit(&b);
return 0;
}
//通过这个例子可以注意到,一个比较科学的写类定义的顺序是:先写所有类的声明,然后分别写每个类的定义和构造函数,
//最后写每个类的方法定义。
本文介绍了C++中的友元关系,解释了友元关系允许一个类访问另一个类的protected和private成员。通过详细讲解和示例代码,探讨了友元关系的使用和一些需要注意的细节问题。
393

被折叠的 条评论
为什么被折叠?



