(嵌入式八股)第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 回复 分享
    发布于 2025-02-25 15:44 浙江
    mark收藏了
    点赞 回复 分享
    发布于 2025-02-25 15:50 浙江
    已老实
    点赞 回复 分享
    发布于 2025-02-25 15:50 浙江
    点赞 回复 分享
    发布于 2025-02-25 15:41 浙江
    点赞 回复 分享
    发布于 2025-02-25 15:40 浙江

    相关推荐

    刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
    喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
    字节7000实习来了,你...
    点赞 评论 收藏
    分享
    03-24 17:57
    门头沟学院 Java
    yakuso:你这头像哈哈哈
    点赞 评论 收藏
    分享
    评论
    8
    6
    分享

    创作者周榜

    更多
    正在热议
    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务