#include <iostream>
using namespace std;
class A; //先定义一个类A
class B{ //类B
public:
void BMemberFun(A&); //声明一个成员函数
};
class C{ //类C
public:
void CMemberFun(A&); //声明一个成员函数
};
class A{ //类A
friend void display(A); //定义一个友元函数
friend void B::BMemberFun(A&); //定义一个友元函数,注意他是其他类的成员函数
friend C; //定义一个友元类,类C中的成员函数也称为友元函数
private:
int a,b;
public:
A(int x=0,int y=0) //构造函数
{
a=x;
b=y;
}
};
void display(A e) //友元函数可以调用类A的私有成员
{
cout<<"a="<<e.a<<","<<"b="<<e.b<<endl; //函数实现输出类A的数据成员的功能
}
void B::BMemberFun(A &e) //友元函数直接访问类A的数据成员,并改变值
{
e.a=10;
}
void C::CMemberFun(A &e) //引用传参
{
e.b=20;
}
int main()
{
A a1(1,2);
display(a1);
B b1;
b1.BMemberFun(a1);
display(a1);
C c1;
c1.CMemberFun(a1);
display(a1);
return 0;
}
简单介绍一下友元类和友元函数:
声明友元方式:将其他外部函数或其他类中的成员函数声明为一个类的友元函数。
作用:通过友元的方式,一个普通函数或一个类中的成员函数可以访问到封装于某一类中的数据成员,达到数据共享的效果。
访问数据成员方式:通过对象名访问类的私有和保护成员。
对比:普通函数需要调用类的成员函数,以此为接口,对类的数据成员进行操作,比如输出数据成员的值 。而友元函数,可以直接通过对象名进行访问或是修改(函数使用引用传参)。
网友评论