(嵌入式八股)第2章 C++(六)(后续C++相关会持续补充在这里)
2.51 友元函数与友元类
在 C++ 中,friend
(友元)是一个非常重要的概念。通过友元机制,其他类或函数可以访问某个类的私有成员。通常情况下,类的私有成员只能通过该类的成员函数来访问,但通过友元,我们可以打破这一限制。
友元函数(Friend Function)
友元函数是一个在外部定义的函数,它并不是类的成员函数,但能够访问类的私有成员和保护成员。通过声明函数为类的友元函数,可以允许这个函数访问类的私有部分。
- 特点:
- 友元函数不是类的成员函数,它在定义时需要特别声明为该类的友元。
- 友元函数不能直接访问类的成员,必须通过对象来访问类的成员。
- 友元函数是单向的,即使类 A 声明类 B 的函数为友元,类 B 的成员函数也不能访问类 A 的私有成员,除非类 A 也声明类 B 为友元。
display
函数是类 A 的友元函数,因此它能够访问 A 类的私有成员x
。
友元类(Friend Class)
除了将函数声明为友元,还可以将整个类声明为友元类。这样,友元类的所有成员函数都能够访问目标类的私有成员。友元类提供了比友元函数更广泛的访问权限,因为类中的所有成员函数都会成为另一个类的友元函数。
- 特点:
- 友元类的所有成员函数都能够访问被声明为友元的类的所有成员(包括私有成员)。
- 友元类的关系是单向的,即使类 A 将类 B 声明为友元类,类 A 并不是类 B 的友元类。
- 类 B 是类 A 的友元类,因此类 B 中的成员函数
showA
可以访问 A 类的私有成员x
。
友元的注意事项
- 单向性: 友元的关系是单向的。如果类 A 将类 B 声明为友元类,类 A 的成员函数可以访问类 B 的私有成员,但反之则不成立。
- 非传递性: 友元关系是非传递的。如果类 A 将类 B 声明为友元类,类 B 将类 C 声明为友元类,并不意味着类 A 和类 C 之间也有友元关系。
- 尽量避免使用友元类: 除非非常必要,一般不建议将整个类声明为友元类。通常,建议将特定的成员函数声明为友元函数,以提高代码的封装性和安全性。
总结
2.52 模板(Template)
C++ 中的模板是一种强大的功能,允许编写与类型无关的代码。模板分为两种类型:函数模板和类模板。模板通过参数化类型和数据值来实现代码的复用,减少重复代码。
函数模板(Function Template)
函数模板允许我们编写一个通用的函数,函数的参数类型在函数定义时不指定,而是通过模板参数来指定,等到函数调用时,编译器会根据传入的实际参数来推导出函数的类型。
函数模板的定义
template <typename T>
表示这是一个函数模板,T
是类型参数,可以在函数体内用来代替任何数据类型。T add(T a, T b)
是定义的函数模板,它的返回类型和参数类型都是 T
。T
。int
, double
)自动推导出 T
。add(10, 20)
中,T
被推导为 int
,add(3.5, 2.5)
中,T
被推导为 double
。
类模板(Class Temp
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
作者简介:仅用几个月时间0基础天坑急转嵌入式开发,逆袭成功拿下华为、vivo、小米等15个offer,面试经验100+,收藏20+面经,分享求职历程与学习心得。 专栏内容:这是一份覆盖嵌入式求职过程中99%问题指南,详细讲解了嵌入式开发的学习路径、项目经验分享、简历优化技巧、面试心得及实习经验,从技术面,HR面,AI面,主管面,谈薪一站式服务,助你突破技术瓶颈、打破信息差,争取更多大厂offer。