(嵌入式八股)第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 被推导为 intadd(3.5, 2.5) 中,T 被推导为 double

    类模板(Class Temp

    剩余60%内容,订阅专栏后可继续查看/也可单篇购买

    作者简介:仅用几个月时间0基础天坑急转嵌入式开发,逆袭成功拿下华为、vivo、小米等15个offer,面试经验100+,收藏20+面经,分享求职历程与学习心得。 专栏内容:这是一份覆盖嵌入式求职过程中99%问题指南,详细讲解了嵌入式开发的学习路径、项目经验分享、简历优化技巧、面试心得及实习经验,从技术面,HR面,AI面,主管面,谈薪一站式服务,助你突破技术瓶颈、打破信息差,争取更多大厂offer。

    全部评论
    天哪,感觉都是手打的吗,还一个个验证
    1 回复 分享
    发布于 02-25 15:44 浙江
    mark收藏了
    点赞 回复 分享
    发布于 02-25 15:50 浙江
    已老实
    点赞 回复 分享
    发布于 02-25 15:50 浙江
    点赞 回复 分享
    发布于 02-25 15:41 浙江
    点赞 回复 分享
    发布于 02-25 15:40 浙江

    相关推荐

    点赞 评论 收藏
    分享
    评论
    8
    6
    分享

    创作者周榜

    更多
    牛客网
    牛客企业服务