C++三部曲|C++核心思想

news2024/10/5 13:01:50

36254aa5bd1f0425af0c0a3aa71068b1.png

| 导语 C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一,C++发明人Bjarne Stroustrup 一开始没想到 C++ 会获得如此大的成功,他说:“C++ 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标,就是有效的使用硬件,再加上强大的抽象机制,以及它根据来自实际使用情况的反馈进行谨慎的发展”。

目录

3f58b7bec859c018650316137f5adc45.png

C++历史背景

C++历史背景

C ++编程语言的历史可以追溯到1979年,当时Bjarne Stroustrup为博士学位论文进行了一些开发。在Stroustrup可以使用的所有单词中,有一种被称为Simula的语言,顾名思义,它可能是一种主要为仿真而设计的语言。Simula 67语言是Stroustrup使用的变体,被认为是支持面向对象编程范例的主要语言。Stroustrup发现这种范例对包装开发很有帮助。但是,Simula语言对于实践和实际使用而言太慢了;

随后不久,Bjarne Stroustrup希望通过支持面向对象范例来增强C。他深入研究了Smalltalk的OO实现,以获取有关实现的想法。但是他不愿意为此放弃性能,因此他开始从事“C with Classes (带有类的C) ”的工作,希望C ++代码运行时应具有与C代码相似(或更好)的性能。

第一个带有类别编译器的C称为Cfront,它是从称为CPre的C编译器派生而来的。它曾经是一个旨在将带有类别代码的C转换为通用C的程序。值得注意的目的是Cfront主要是用C用类编写的,从而创建了一个自举的编译器(可以自行编译的编译器) 。Cfront后来在1993年被放弃,但是Cfront对未来的编译器和Unix操作系统的实现产生了巨大影响。

1983年,语言的名称从“带有类的C”更改为C ++。C语言中的++运算符是用于递增变量的运算符,它使您可以深入了解Stroustrup如何看待该语言。在此期间添加了许多新功能,其中最引人注目的是虚函数,函数重载,带有&符号的引用,const关键字和使用两个正斜杠的单行注释。

1985年,Stroustrup引用了名为“ C ++编程语言”的语言。已出版。同年,C ++被实现为商业产品。该语言尚未正式标准化,因此使该书成为非常重要的参考。该语言在1989年再次进行了更新,以包括受保护的成员和静态成员,以及从多个类的继承.

1990年,发行了《带注释的C ++参考手册》。同年,Borland的Turbo C ++编译器将作为商业产品发布。Turbo C ++添加了许多其他库,这些库会对C ++的开发产生相当大的影响。尽管Turbo C ++的最后一个稳定版本是2006年,但该编译器仍被广泛使用。

1998年,C ++标准委员会发布了第一个C ++ ISO / IEC 14882:1998国际标准,其非正式名称为C ++ 98。据说《带注释的C ++参考手册》对标准的制定产生了很大的影响。还包括标准模板库,该模板库于1979年开始概念开发。2003年,该委员会对1998年标准所报告的多个问题做出了回应,并对其进行了相应的修订。更改的语言称为C ++ 03。

2005年,C ++标准委员会发布了一份技术报告(称为TR1),详细介绍了他们计划添加到最新C ++标准中的各种功能。新标准被非正式地称为C ++ 0x,因为它有望在第一个十年结束之前的某个时间发布。具有讽刺意味的是,新标准要到2011年年中才会发布。直到那时为止,已经发布了几份技术报告,并且一些编译器开始为新功能添加实验性支持。

2011年中,新的C ++标准(称为C ++ 11)完成。Boost库项目对新标准产生了重大影响,其中一些新模块直接来自相应的Boost库。一些新功能包括正则表达式支持,全面的随机化库,新的C ++时间库,原子支持,标准线程库 ,一种新的for循环语法,提供的功能类似于某些其他语言中的foreach循环,auto关键字,新的容器类,对联合和数组初始化列表以及可变参数模板的更好支持。

2014年,C ++ 14(也称为C ++ 1y)作为C++11的一个小扩展发布,主要功能是错误修复和小的改进,国际标准投票程序草案于2014年8月中完成,加强lambda函数,constexpr和类型推导特性;

2017年,发布C++17标准,C++17提供了很多东西。增强了核心语言和库;

2020年,发布C++20标准,推出了很多重量级功能,其中比较重要:

  • Concepts:概念改变了我们思考和编程模板的方式。它们是模板参数的语义类别。它们使您可以直接在类型系统中表达您的意图。如果出了什么问题,您会收到清晰的错误消息。

  • Ranges library:新的ranges库使它可以直接在容器上执行算法,用管道符号组成算法,并将其应用于无限数据流。

  • Coroutines:由于协程,C ++中的异步编程成为主流。协程是协作任务,事件循环,无限数据流或管道的基础。

  • Modules:模块克服了头文件的限制。他们承诺很多。例如,头文件和源文件的分离变得和预处理器一样过时了。最后,我们有更快的构建时间和更轻松的构建软件包的方法。

  • Concurrency:

    Atomic Smart Pointers,

    Joining & Cancellable Threads,

    The C++20 Synchronization Library,增强了C++并发编程能力;

  总结一下,C++标准演进路线如下图:

3d032ee57e98293cf055c764094c48fc.png

 从C++发展历史背景来看,C++产生的根本原因有两点:

  • 面向对象编程:  Bjarne Stroustrup研究Simula OOP编程思想,觉得这个是应对大型软件开发的绝佳武器,拥有很好的现实抽象能力和代码组织能力;

  • 高性能:Bjarne Stroustrup准备开发一套通信系统,需要编写接近硬件的低级代码,例如内存管理器、进程调度器和设备驱动程序来分离软件组件,由于当时计算机硬件性能限制,对软件性能要求苛刻,广泛使用的C语言有比较接近硬件工作的能力,所以Bjarne Stroustrup基于C语言创造可以面向对象编程的C++语言;

推荐学习:

《An Overview of the C++ Programming Language》Bjarne Stroustrup 

《Design and Evolution of C++》Bjarne Stroustrup

C++面向对象编程

怎么才能深刻理解面向对象思想?

面向对象程序设计的雏形,早在1960年的Simula语言中即可发现,当时的程序设计领域正面临着一种危机:在软硬件环境逐渐复杂的情况下,软件如何得到良好的维护?面向对象程序设计在某种程度上通过强调可重复性解决了这一问题。20世纪70年代的Smalltalk语言在面向对象方面堪称经典——以至于30年后的今天依然将这一语言视为面向对象语言的基础。

维基百科:

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

面向对象编程就是通过对象把现实世界映射到计算机模型的一种编程方法,是抽象思维的一种体现。而抽象是计算机科学中最重要的一种思维方式; 

面向对象方法的本质就是主张从客观世界固有的事物出发的构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,具体实现采用对象为基础,对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西;

程序的本质是人的意志延伸到计算机的可识别的指令。计算机(CPU)仅能识别 01代码,本身不能解决任何问题(无意识),只能由人编写程序控制计算机解决问题,因此编程的本质就是人“教会”计算机解决问题。

7b89964ed3dab28e6d23ed957f8eefc1.png

面向对象的编程技术有助于减小这一隔阂、并使这两个空间尽量趋于一致;

抽象思维一直推动着计算机技术不断向前发展,科学技术本身就是现实世界的抽象和演绎:

电路信号->01二进制->指令汇编->高级编程->模块设计->框架设计->单机系统->分布式系统-->云计算

推荐学习:

《深入理解计算机系统》

《编码:隐匿在计算机软硬件背后的语言(美.佩措尔德)》

C++面向对象编程三个核心技术

封装

主要的方法是对象和类:

对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西;

类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质,它由一组静态特征(数据)和它可执行的一组操作(方法)组成,一个对象就是类的一个实例;

对象和对象之间隐藏自己内部实现细节,通过标准接口进行通信,这样就可以提高程序内聚,降低耦合,方便系统进行解耦设计,同时也提高了系统稳定性,降低系统风险。

继承

主要的方法通过类的公有继承、保护继承,私有继承,单继承,多继承;结合类成员的三种属性:public、protected 和 private; 来实现共享和限制属性和方法的访问;

继承的优点是:相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息,提高软件的可重用性,便于软件迭代;

多态

编译时多态

主要的方法是重载和模板,重载包括运算符重载和函数重载,运算符重载通过重新定义运算符实现函数来实现,底层还是函数重载,函数重载通过参数列表的不同来区分不同的方法,底层是不同的函数签名;

模板是通过参数化类型来区分不同类和函数;

细节请参考:

《C++ Templates: The Complete Guide》

运行时多态

主要方法是重写,子类对父类方法的“重新”实现,底层是通过定义虚函数和构建虚函数表,在虚函数表里面插入RTTI(运行时类型信息)信息,结合继承和动态绑定,程序就可以根据实际类型判断并调用相应的属性和方法。

5fdf96ffac5360e628bfccebc7ba6f3e.png

细节请参考:

《深度搜索c++对象模型》

多态强大的功能允许不修改父类代码和业务逻辑代码,就通过扩展子类来实现功能的扩展。多态使模块在复用的基础上具备了更强的可扩展性;

C++语言核心精神

C ++的设计目标

高效地使用硬件

  • 保持与C语言兼容,C++代码与C代码运行时应具有相似(或更好)的性能;

  • 将内置操作和类型直接映射到硬件,以提供有效的内存使用和有效的低级操作;

零成本的抽象机制

  • 低成本的灵活抽象机制,可为用户定义的类型提供与内置类型相同的符号支持,用途范围和性能;

  • 类,继承,模板,概念,别名等;

任何违反以上两个设计目标之一的建议都可能会遭到拒绝;

C ++的未来目标

更加灵活,支持多种编程范型:

  • 面向过程编程:兼容C语言编程,支持自上而下面向过程编程;

  • 面向对象编程:封装,继承,多态,对象内存模型,构造和析构;

  • 泛型编程:泛型编程是自 STL(标准模板库)纳入到 C++ 标准以后才逐渐流行起来的新范式,核心思想是“一切皆为类型”,或者说是“参数化类型”“类型擦除”,使用模板而不是继承的方式来复用代码,所以运行效率更高,代码也更简洁;

  • 模板元编程:模板元编程是一种高级、复杂的技术,C++模板是图灵完备的,可以在编译期间模拟一个完整的图灵机,也就是说,可以完成任何的计算任务,比如编译期数值计算、类型计算、代码计算(如循环展开),而类型计算和代码计算可以使得代码更加通用,更加易用,性能更好;

  • 函数式编程:核心思想是以函数对象(可以作为入参和返回值),无状态(无副作用),更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,C++已经提供了一些基本元素:Lambda表达式,std::function、函数对象。模板元编程等;

更好的类型系统:内置更多类型(通过标准库扩展),更安全类型系统,更好类型泛化编程支持,支持自省,反射等特性;

更好资源的安全性:更好的对象内存模型,更好对象所有权设计(可以学习借鉴Rust),更好异常安全机制;

更好利用硬件:caches,多核(更好支持并发编程),GPUs,FPGA,SIMD等;

看Bjarne Stroustrup专访,关于程序语言设计哲学讨论,更能体会到C++的核心设计思想;

e96003e4cf4d38cfad2e79899c26031f.png

C++ 的最佳实践

我挑选一些自己觉得比较重要的实践条目,大家可以自行修正补充一下:

  • 尽量使用现代C++(C++11 以上)进行C++编程,开发效率,性能,安全性都有极大提高;

  • 尽量使用智能指针,用RAII模式管理对象生命周期,静态GC(智能指针,RAII,move语义);

  • 理解C++对象的内存模型和布局,方便定位和解决各种C++内存问题;

  • 异常是一个即安全又危险的特性,请谨慎使用;

  • 熟悉常见的设计模式和C++特有的设计范式(C++Idioms),帮助自己设计构建更好的系统,对代码进行必要的重构;

  • 代码一定要做单元测试,测试代码尽量覆盖所有的分支(覆盖率尽量高),可以采用GoogleTest单元测试框架;

  • 代码最好用valgrind等工具跑一遍,检查代码有没有内存泄漏风险和异常;

C++推荐书单

C语言:

《The C Programming Language》

学习C++,离不开C语言的了解,此书被誉为C语言的圣书,需要反复细读。

手册参考书籍:

《C++标准程序库(C++ Standard Library Tutorial and Reference) 》

《C++编程规范(C++ Coding Standards) 》

用来当手册使用,有需要时候查询一下。

C++初学者入门:

《C++ Primer》

此书为入门经典书籍,初学者一定要经常翻看。

如何更好编写C++程序:

《Effective C++ 》:

《Effective STL》

《Exceptional C++》

让你了解C++经验用法,避免踩坑。


C++内存模型:

f768dbc98192758a9fdb38af55dc8a54.png

《深度搜索c++对象模型》

让你理解C++内存布局,对C++各种内存异常问题有帮助。

泛型编程:

《深入浅出STL》

《Beyond the C++ Standard Library(Boost)》

可以学习泛型编程精髓。

modern C++:

《深入理解C++11》

《Effective Modern C++》

C++11版本以后被称为modern C++,代表一个新时代C++诞生,写代码更快,更好,更稳。

高手进阶

模板编程:

《C++ 模板完全指南(C++ Templates: The Complete Guide)》

《C++设计新思维-泛型编程与设计模式之应用(Modern C++ Design ) 》

《C++模板元编程(C++ Template Metaprogramming)》

《Advanced c++ Programming Styles and Idioms 》

如果想看懂标准库STL或者boost库代码,需要了解一些模板编程相关的知识。

设计模式:

《设计模式:可复用面向对象软件的基础》

《Modern C++ Design》

《More C++ Idioms》

《Advanced c++ Programming Styles and Idioms 》

了解一下常用设计模式和C++设计惯用方法,可以更好设计C++系统。

推荐博客:

1. https://www.stroustrup.com

ee4588d705f69098454e14c9b59de7a5.png

Bjarne Stroustrup,C++之父,Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样,都是百科全书级的,如果你认真研究,你也会成为你同事或周围人的C++之父。

2. https://www.fluentcpp.com

8ab21981de4d42bddd5f672ff9d522db.png

博客作者Jonathan Boccara是C++软件工程负责人、博客作者和作家,专注于如何使代码具有表现力,顶级C++高手,想成为专业C++工程师,可以看一看。

3. http://scottmeyers.blogspot.com

be359c8cc05e70c027deae735d3b935f.png

Scott Meyers,不多介绍,世界上几乎每个C++程序员都应该知道的名字,畅销书:Effective C++, More Effective C++的作者。博客长期更新,就凭Scott Meyers这个名字,就值得一读。

4. http://www.modernescpp.com/index.php

7629c4a3a9c8aaf08220f582a83eefa8.png

现代C++编程大神,文章主打modern C++,让你与时俱进;

5. http://purecpp.org/

f8d7bb115f3f40245fb5c840574fac68.png

这个应该算是国内顶级C++社区,举办多届C++大会。如果你想了解一些C++新特性,可以看一看。

两个经典网站

http://www.cplusplus.com

2c988432cf31402a6ac8f90102116ee9.png

https://en.cppreference.com

49be1086b41cf50f568773f771b36f8c.png

用来查询标准库API和使用说明,以及标准说明解释

81fc00cd4a5424df7eaa1e8c3deb187c.png

如果想和我有更多交流,可以加我个人微信:

0bcb36aaf9f589019211ea00ae0798b3.jpeg

欢迎大家加入极客星球圈子:

全网独家专业的技术学习圈子:

  • 修炼基本功:直播分享多年工作经验和基础技术深度理解(比如深入理解系列,基础概念的深入理解等);

  • 扩展视野:真正的分享海内外技术发展,大厂技术内幕,业界解决方案;

  • 找工作系列:面试问题,简历修改,问题答疑,各类大厂(芯片,自动驾驶,嵌入式,互联网等)制定学习路线和指导;

  • 职场普升:可以分享各种不同公司宝贵的职场工作经验, 项目经验,做事经验,普升经验,少走弯路;

2a97640d95f71b7a5b168f8cb7cb217a.png

还有更多的精彩分享:

  • 深入理解计算机系统

  • 深入理解操作系统(调度,内存,网络,IO)

  • 深入理解并发技术全景指南

  • 深入理解编程语言

  • 深入理解算法与数据结构

  • 深入理解网络协议

  • 深入理解网络编程

  • 深入理解性能优化

  • 深入理解分布式技术

  • 深入理解数据库

  • 深入理解代码设计

  • 深入理解架构设计

...

e478b6ff38edceed0bc730bdd11cd38b.jpeg

深入理解Linux网络子系统

488f33a78fdf5152c3ace738f9be4e57.jpeg

TCP/IP协议精华指南pdf

5d5f32c1519ad28b05a5c337ee45c46c.jpeg

深入理解并发/并行技术


227a3224d479097a38429964ea67b819.jpeg

如何才能掌握所有的编程语言


78da584d2e50a4491ee0f2dc4b52db41.jpeg

一文掌握网络编程精华

e9ba7c22e32e87b5b7c86fc2713ff8d8.jpeg

掌握性能优化神功心法,进阶高薪


看完一键三连
在看转发点赞

是对文章最大的赞赏,极客重生感谢你f569b41f18e2627deb99c3742e069396.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端014_标签模块_修改功能

标签模块_修改功能 1、需求分析2、Mock 添加查询数据3、Mock 添加提交修改数据4、Api 调用接口回显数据5、提交修改后的数据6、验证1、需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出标签信息渲染。修改后点击确定 提交修改数据。 2、Mock 添加查询数据 请求URL: /a…

在OpenCV中使用Canny边缘检测

边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。 Python中的Canny边缘…

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说

在祁宁家里,有一套完整的赛车模拟器,他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友,除了享受速度与激情带来的愉悦感,祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…

Studio Bot - 让 AI 帮我写 Android 代码

Google I/O 2023 不出所料,今年的 I/O 大会只突出了一个关键词 “AI”。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能,希望通过 AI 帮助开发者更轻松地写代码: Studio Bot…

STM32F4_内部温度传感器

目录 1. 什么是温度传感器 2. 温度传感器简介 3. 库函数配置内部温度传感器 4. 实验程序 4.1 main.c 4.2 ADC.c 4.3 ADC.h 1. 什么是温度传感器 温度传感器是一种测量物体冷热程度的设备,以可读的方式通过电信号提供温度测量。比较常见的如热电偶温度传感器。…

越来越多的单身女性开始买房了

近日,越来越多的单身女性开始购买房产,这一现象引起了社会的广泛关注。 根据中国青年报社会调查中心联合问卷网对2006名受访者进行的一项调查显示,84.2%的受访者认为近几年身边单身女性购房的现象增多了,而93.9%的受访者支持单身女…

无监督域适应 (UDA)(3)

本帖介绍基于 bi-classifier adversarial learning 的改进。 一、动机 模型训练在两个步骤之间交替进行:(I)约束两个分类器的学习,以最大化未标记目标域数据的预测差异;(II)约束特征提取器的学习,以最小化这种差异。 尽管这种方法是一种优雅的表述&am…

Call for Papers丨第一届LLM@IJCAI‘23 Symposium,大会主席陈雷、杨强、唐杰

大规模语言模型(LLMs),如ChatGPT和GPT-4,以其在自然语言理解和生成方面的卓越能力,彻底改变了人工智能领域。 LLMs广泛用于各种应用,如语音助手、推荐系统、内容生成模型(如ChatGPT&#xff09…

开源进展 |WeBASE更新啦,快来了解新特性!

WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应用和FISCO BCOS底层之间搭建的一套通用组件,围绕交易、合约、密钥管理、数据、可视化管理来设计各个模块,屏蔽了区块链底层的复杂度,从而极大降…

多模态GPT:国内发布一款可以在线使用的多模态聊天机器人!快来把玩~

论文: MultiModal-GPT: A Vision and Language Model for Dialogue with Humans代码: https://github.com/open-mmlab/Multimodal-GPT (包含代码、数据、demo)作者:OpenMMLab 深度学习自然语言处理 原创作者: 林哲乐 使用视觉和语言指令训练一…

Linux基础学习---3、时间日期类、用户管理命令、用户组管理命令

1、时间日期类 1、基本语法date [Option] ...[Format]2、选项说明 选项功能-d<时间字符串>显示指定的“时间字符串”表示的时间&#xff0c;而非当前时间-s<日期时间>设置日期时间 3、参数说明 参数功能<日期时间格式>指定显示时使用的日期时间格式 1.1…

一、数据库设计

整个项目的设计包括5个数据库&#xff1a; glkt_activity:优惠券的相关设计 glkt_order:订单的相关设计 glkt_user:得到微信授权的账号信息的相关设计 glkt_vod:课程信息的相关设计 glkt_wechat:微信公众号的相关设计 glkt_activity&#xff1a; coupon_info:优惠券的信息 cou…

java+iClient Openlayers实现土壤墒情旱情灾害模拟预报预警分析

应用及软件实现效果图&#xff1a; 一、应用背景 作为一个农村长大的人&#xff0c;我非常关注自然灾害和气候变化对土地旱情墒情影响。近年来&#xff0c;干旱和洪涝灾害在很多地方频繁发生&#xff0c;给人们的生命财产安全带来了极大的威胁。因此&#xff0c;旱情和墒情模拟…

在计算语义相似度中,我看网上说要加range,我不知道往哪里加?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 行宫见月伤心色&#xff0c;夜雨闻铃肠断声。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银交流群【王王雪饼】问了一个Python处理语义相…

Python学习历程-元组的基本操作回顾

在学习元组之前&#xff0c;我们先再回过头看看之前写过的文章&#xff0c;看看列表的一些基本操作&#xff1a; Python中的列表介绍 记录我的Python学习历程-列表的基本操作&#xff0c; 接下来再快速回顾一下元组的一些重点&#xff1a; 列表属于可变序列&#xff0c;元组、字…

Powerlink协议使用极简入门教程

网上关于powerlink协议的知识太少&#xff0c;而且都太分散太零碎&#xff0c;容易让人一头扎进去摸不着头绪。新手看到demo源码可能都不知道有什么用途&#xff0c;怎么能联动的跑起来看到效果&#xff0c;有种无从下手的感觉。其实Powerlink协议的使用挺简单&#xff0c;特别…

STM32F4_光敏传感器

目录 1. 什么是光敏传感器、光敏电阻 2. 硬件分析 3. 实验程序 3.1 main.c 3.2 ADC3.c 3.3 ADC3.h 3.4 Lightsensor.c 3.5 Lightsensor.h 1. 什么是光敏传感器、光敏电阻 光敏传感器也称为光电传感器。是利用光电器件把光信号转换成电信号的一种传感器。它的敏感波长在…

opencv实践项目-多张图片拼接之stitcher

目录 1.简介2. 拼接算法流程3. 代码演示 1.简介 OpenCV从2.4.x版本之后多出来一个新的模型 图像拼接&#xff0c;该模块通过简单的高级API设置&#xff0c;可以获得比较好的图像拼接效果&#xff0c;OpenCV官方提供了一个高度集成的API函数 Stitcher&#xff0c;只要两行代码就…

SRE/DevOps不得不懂的:Prometheus的配置工程化!

原创不易&#xff0c;还请关注和转发&#xff5e;谢谢 背景 Prometheus有两个最基本的组件&#xff1a;一个是Prometheus程序&#xff0c;一个是Alertmanager程序。 它们的职责分工很明确&#xff1a; • Prometheus程序负责&#xff1a;定时拉取监控指标数据、存储指标数据、根…

谈谈IOC容器和AOP编程

Java发展的路途中&#xff0c;由刚开始的使用new创建对象&#xff0c;到使用抽象类&#xff0c;接口进行解耦&#xff0c;又到了提问时刻&#xff0c;什么是耦合度&#xff1f; 对于这个对象的关联和依赖关系&#xff0c;例如&#xff1a; 当一个对象要使用&#xff0c;但是&…