1. 友元函数-基础学习
1. 友元函数不属于该类的成员函数,类中声明、类外定义,并且不需要加类限定;
2. 传参类的对象可以直接访问类中的private或者protected成员,不需要加类限定和使用对像调用。
3. 声明方法:friend <返回类型> <函数名> (<参数列表>);
4. 如何调用友元函数,访问对象中私有和保护数据?对象的引用作为友元函数的参数。
5. 友元函数声明为公有、私有没有区别,友元函数并不属于该类
2. 友元函数-特点
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
3. 友元函数的定义及调用
class A_24
{
private:
int x;
int y;
friend void fun24_01(A_24 &a1_24);//友元函数声明为公有、私有没有区别
public:
A_24();
friend void fun24_02(A_24 &a1_24);
};
A_24::A_24(){//普通构造函数,给成员变量初始化
x = 2;
y = 4;
}
void fun24_01(A_24 &a1_24){//类外定义不需要加类限定;
printf("a1_24.x+a1_24.y=%d\n",a1_24.x+a1_24.y);
}
void fun24_02(A_24 &a1_24){//类外定义不需要加类限定;
printf("a1_24.x+a1_24.y=%d\n",a1_24.x+a1_24.y);
}
void test_24_01(){
A_24 a1_24;
fun24_01(a1_24);//友元函数直接调用,参数为类的对象
fun24_02(a1_24);
}
输出结果:
a1_24.x+a1_24.y=6
a1_24.x+a1_24.y=6
参考: c学习-38