友元
友元
友元的设计初衷
位于类的private域或者protected域中的成员是无法被外界所访问的,但是在C++代码开发的过程中,有不可避免的需要动用成员的情况,所以才出现了友元这一概念,如果设置为友元,那么该部分就可以在类外安全合法的访问并修改类内的成员
友元的三大分类以及基础语法
1. 友元函数
为函数声明友元,在代码开发中最常见
// 第一步:提前声明类(如果友元函数定义在类之前,避免编译报错)
class 类名;
// 第二步:定义友元函数(可先声明,后定义)
返回值类型 友元函数名(类名 &对象名/const 类名 &对象名) {
// 直接访问类的private/protected/public成员
对象名.私有成员;
对象名.公有成员;
}
// 第三步:定义类,在类内声明该函数为友元
class 类名 {
private:
数据类型 私有成员;
public:
数据类型 公有成员;
// 友元函数声明(无static,无需加类名::)
friend 返回值类型 友元函数名(类名 &对象名/const 类名 &对象名);
};
2 友元类
class 类A { // 被友元类访问的类(开放权限的类)
private:
数据类型 私有成员;
public:
数据类型 公有成员;
// 友元类声明(写在类A内部,friend + 类名)
friend class 类B;
};
// 友元类(拥有访问权限的类)
class 类B {
public:
void 成员函数(类A &a) {
// 直接访问类A的私有成员
a.私有成员 = 10;
// 直接访问类A的公有成员
a.公有成员 = 20;
}
};
3. 友元成员函数
// 第一步:提前声明类A(类B的成员函数要用到类A)
class 类A;
// 第二步:声明类B(仅声明,不定义成员函数,因为成员函数需要类A的完整定义)
class 类B {
public:
// 仅声明类B的成员函数(后续定义)
void 特定成员函数(类A &a);
};
// 第三步:定义类A,声明类B的该特定成员函数为友元
class 类A {
private:
数据类型 私有成员;
public:
friend void 类B::特定成员函数(类A &a); // 友元成员函数声明
};
// 第四步:定义类B的该成员函数(此时类A已完整定义,可访问其所有成员)
void 类B::特定成员函数(类A &a) {
a.私有成员 = 30; // 直接访问类A私有成员
}

浙公网安备 33010602011771号