- 博客(186)
- 收藏
- 关注
原创 C++纯虚函数-接口
接口通常用于定义类应该实现的方法,但不提供具体实现。这样的实现方式允许多个类共享相同的接 口,同时让每个类根据需要去实现这些接口。:创建一个包含纯虚函数的抽象类,这些函数构成了接口的一部分。这些函数在抽象类 中只有声明而没有具体的实现。)一样直接定义接口的关键字,但可 以通过抽象类和纯虚函数的方式来实现接口的概念。:派生类继承抽象类,并实现其中的纯虚函数,以具体实现接口定义的方法。中模拟出类似接口的行为,允许多个类共享相同的接口并提供各自的实 现。中,虽然没有像其他编程语言(比如。通过这种方式,您可以在。
2025-02-27 16:00:00
146
原创 C++抽象类
这意味着,抽象类定义了派生类应该具有的功能,但不完全实现这些功能。对于不同的交通工具,比如汽车和自行车,它们的移动方式是 不同的。·····抽象类至少有一个纯虚函数。这是一种特殊的虚函数,在抽象类中没有具体实现,而是留给派。抽象类的主要目的是为派生类提供一个共同的基础结构,确保所有派生类都有一致的接口和行。你需要一个具体 的交通工具,比如“·····由于抽象类不完整,所以不能直接创建它的对象。·····纯虚函数的声明方式是在函数声明的末尾加上。何地方,你需要一个具体的交通工具。的概念具体实现了移动的功能。
2025-02-27 11:41:00
125
原创 C++多态
想象一下,你有一个遥控器(这就像是一个基类的指针),这个遥控器可以控制不同的电子设备(这些 设备就像是派生类)。”按钮(这个按钮就像是一个虚函 数)都能控制它们,但具体的操作(打开电视、播放音乐、开灯)则取决于你指向的设备。当我们使用基类类型的指针或引用来调用虚函数时,实际调用的是对象的实际类型(派生类):我们可以添加新的派生类而不必修改使用基类引用或指针的代码。:我们可以设计一个稳定的接口,而将具体的实现留给派生类去处理。:允许我们编写可以处理不确定类型的对象的代码。相同的接口,不同的行为。
2025-02-27 00:26:27
299
原创 C++中的虚继承
这不仅会导致 资源浪费,还可能引起数据不一致的问题。虚继承通过确保共同基类的单一实例存在于继承层次中,来 解决这一问题。语言中处理复杂继承关系的一种重要机制,但它也带来了一定的复杂性和性能考虑。:虚继承应谨慎使用,因为它增加了复杂性。中一种特殊的继承方式,主要用来解决多重继承中的菱形继承问题。:虚继承可能会改变类的内存布局,通常会增加额外的开销,比如虚基类指针。组合或接口)避免菱形继承,那通常是更好的选择。:在使用虚继承时,虚基类(如上例中的。类)只能由最派生的类(如。的继承声明为虚继承(
2025-02-26 22:28:56
252
原创 C++中的多重继承
中,多重继承是一种允许一个类同时继承多个基类的特性。这意味着派生类可以继承多个基类的属 性和方法。多重继承增加了语言的灵活性,但同时也引入了额外的复杂性,特别是当多个基类具有相同 的成员时。在多重继承中,派生类继承了所有基类的特性。这包括成员变量和成员函数。,以及一个同时从这两个类继承的派生类。
2025-02-26 21:17:20
253
原创 C++中的虚函数
关键字用于支持多态,尤其是在涉及类继承和方法重写的情况下。:确保派生类的函数确实重写了基类中的一个虚函数。:当通过基类的指针或引用调用一个虚函数时,调用的是对象实际类型的函数版本。:一旦在基类中声明为虚函数,该函数在所有派生类中自动成为虚函数,无论是否。:如果类中有虚函数,通常应该将析构函数也声明为虚的。应仅用于派生类(子类)中重写基类(父类)的虚函数。见的错误,如签名不匹配导致的非预期的函数重写。:明确指示函数意图重写基类的虚函数。:在派生类中重写虚函数。:在基类中声明虚函数。关键字才会成为虚函数。
2025-02-26 21:13:23
284
原创 C++继承
它允许一个类(称为派生类或子类)继承另一个类(称为基类或父类)的属性和方法。,它定义了所有动物共有的特性和行为。:子类可以扩展父类的功能,添加新的属性和方法,或者重写(覆盖)现有的方法。让我们用一个简单而有趣的案例来说明继承的概念:动物园中的动物。:子类继承了父类的属性和方法,减少了代码的重复编写。)的,这决定了基类成员在 派生类中的访问权限。类,并添加或 修改特定于它们自己的特性和行为。,以及建立一种 类型之间的层次关系。Roadster类中也是公有的。)中的一个核心概念,特别是在。中,继承可以是公有(
2025-02-25 22:09:33
264
原创 C++的析构函数
编程实践中,确保资源在对象析构时被适当释放是非常关键的。当使用 智能指针和其他自动资源管理技术时,可以减少显式编写析构函数的需要,但了解析构函数的工作原理 仍然很重要。:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用。的生命周 期结束时(即离开了它的作用域), MyClass。的构造函数分配了一块内存,而析构函数释放了这块内存。一个动态分配的对象),析构函数会被自动调用。:如果一个类是多态基类,其析构函数应该是虚的。:析构函数的名称由波浪号(中的一个特殊的成员函数,的析构函数被自动调用,
2025-02-25 18:08:43
295
原创 this关键字
在C++中,this关键字是一个指向调用对象的指针。它在成员函数内部使用,用于引用该函数的对象。使用this可以明确指出成员函数正在操作的是哪个对象的数据成员。指针来返回调用该函数的对象的引用,这允许链式调用,如。类型的对象,并展示了如何使用这。
2025-02-25 14:38:44
234
原创 使用初始化列表
中,使用初始化列表来初始化类的字段是一种高效的初始化方式,尤其在构造函数中。初始化列表 直接在对象的构造过程中初始化成员变量,而不是先创建成员变量后再赋值。被用于通过初始化列表直接初始化成员变量。:对于非基本类型的对象,使用初始化列表比在构造函数体内赋值更高效,因为它避免了先默。:对于引用类型和常量类型的成员变量,必须使用初始化列表,因为这些类型的成员变量在。:成员变量的初始化顺序是按照它们在类中声明的顺序,而不是初始化列表中的顺序。中推荐的初始化类成员变量的方式,因为它提供了更好的性能和灵活性。
2025-02-24 23:39:48
165
原创 C++的引用
一旦引用被初始化为一个对象,就不能被指向到另一个对象。语言中,一个数据对应一个内存,通过由一个变量名来访问这个内存空间的数据,叫做直接访问,相 对直接访问,·官方没有明确说明,但是引用确实不是传统意义上的独立变量,它不能“一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。因此,您可以通过原始变量名称或引用来访问变量的内容。当函数返回一个引用时,则返回一个指向返回值的隐式指针。函数可以返回一个引用,方式与返回 一个指针类似。
2025-02-24 21:45:57
633
原创 QT中经常出现的用法:组合
于表示一个类是由另一个类的对象组成的。这种关系通常表示一种。1.在一个类Car里面再调用Wheel类。中,一个类包含另一个类的对象称为组合(普通变量访问成员变量或者成员函数,使用。指针变量访问成员变量或者成员函数,使用。普通变量访问成员变量或者成员函数,使用。指针变量访问成员变量或者成员函数,使用。其次指针的变量需要使用 -> 去引用。这是一种常见的设计模式,用。
2025-02-23 22:00:35
313
原创 C++中结构体与结构体变量 和 类与对象的区别
string str = "车的品牌是:"+brand+",型号是:"+type+",颜色是:"+color+"上市年限是:" + std::to_string(year);结构体:struct student{ 具体是多少,年龄,名字,性别,成绩 }struct结构体,在写结构体指针struct Car *AodiA6 的时候,打印不出结果;结构体变量: stu{ 名字:张三,年龄:18,成绩:96 }类 ->对象 (类是对象的模板 ,对象是类的实例化)年龄,名字,性别,成绩。
2025-02-23 21:14:01
317
原创 Lambda表达式参数捕获
表达式对外部变量的访 问和修改。按值捕获是安全的,但不允许修改原始变量,而按引用捕获允许修改原始变量,但需要注意 引用的有效性和生命周期问题。3.第三个Lambda表达式modifyAndmul使用[&]捕获列表,这表示按引用捕获所有外部变量,因此,它可以修改x,和y的值。1.第一个Lambda表达式add按值捕获了x,y(即他们的副本),这意味着add内的x和y是在Lambda定义时值的拷贝。2.第二个Lambda表达式mul使用[=]捕获列表,这表示按值捕获所有的外部变量。
2025-02-23 13:29:25
137
原创 C++的Lambda表达式
我们可以写一个例子,其中使用一个函数来找出两个数中的较大数,这个函数接受一个Lambda函数作为回调来比较这两个数。然后,我们使用这个Lambda表达式来计算两个数字(50和20)的和,并将结果存储在变量ret中。我们定义了一个名为add的Lambda表达式,它接受两个整数参数,并返回他们的和。的方式,它允许你在需要函数的地方内联地定义函数,而无需单独命名函数。表达式的基本用法:作为一种简洁而快速的方式来定义小型函数。的指针,它接受两个整数并返回一个布尔值。表达式的函数体,包含需要执行的代码。
2025-02-23 12:00:00
439
原创 C++的内联函数
这意味着编译器会尝试将函数调用替换为函数本身的代码,这样可以减少函数调用的开销,尤其是在小型函数中。内联函数通常用于优化小型,频繁调用的函数,因为它避免了函数调用的常规开销(如参数传递,栈操作等)。内联函数是一种用于优化程序性能的工具,但需要合理使用,以确保代码的可维护性和性能的平衡。:即使函数被声明为内联,编译器也可能决定不进行内联,特别是对于复杂或递归函数。:最适合内联的是小型函数和在性能要求高的代码中频繁调用的函数。:最终是否将函数内联是由编译器决定的,即使函数被标记为。在函数声明前添加关键字。
2025-02-22 20:53:23
282
原创 Linux创建server服务器实现多方信息收发
3.listen()监听函数:在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成的。2.bind函数:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);accept()接受一个客户端的连接请求,并返回一个。
2025-01-10 23:35:36
1009
原创 Lniux-网络编程的简述
例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP支持一对一,一对多,多对一和多对多的交互通信。进程之间的通信我们曾学过,管道,消息队列,共享内存,信号,信号量。
2024-12-05 23:19:10
244
原创 Linux信号量的编程
一开始 val 表示信号量的钥匙为0,fork操作后,先运行父进程,pGetkey(semid);拿钥匙发现val 为0 卡住,挂起,进而运行子进程,vPutBackKey(semid);操作放入钥匙然后再运行父进程。
2024-11-28 21:28:06
243
原创 什么是互斥量
在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步,而互斥型信号量用于资源保护互斥型信号量和二值型信号量还有一个,互斥型信号量可以。
2024-10-20 18:46:01
242
原创 信号量和二值信号量
是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。
2024-10-18 21:55:24
326
原创 队列的简介
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息。如果使用全局变量,兔子(任务1)修改了变量 a ,等待树獭(任务3)处理,但树獭处理速度很慢,在处理数据的过程中,狐狸(任务2)有可能又修改了变量 a ,导致树獭有可能得到的不是正确的数据在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依次处理。队列中的每一个数据;队列能够存储队列项目的最大数量;创建队列时,需要指定队列长度及队列项目大小。
2024-10-17 21:49:24
698
原创 任务的调度 与任务的状态
调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。FreeRTOS中开启任务调度的函数是但在 CubeMX 中被封装为。
2024-10-16 20:16:45
379
原创 任务的创建与删除
动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。1. pvTaskCode:指向任务函数的指针,任务必须实现为永不返回(即连续循环);2. pcName:任务的名字,主要是用来调试,默认情况下最大长度是16;任务可以理解为进程/线程,创建任务就会在内存开辟一个空间。5. pxCreatedTask:用于返回已创建任务的句柄可以被引用。4. uxPriority:任务优先级,数值越大,优先级越大;3. pvParameters:指定的任务栈的大小;二,任务创建与删除函数。
2024-10-16 19:44:56
327
原创 FreeRtos到底是什么?
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。
2024-10-16 17:00:44
395
原创 CAN的协议层介绍
数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。功能:表示数据帧的开始。特点:由一个显性位(Dominant Bit)构成,此时CAN_H为高电平(如3.5V),CAN_L为低电平(如1.5V),二者之间的电位差形成信号。·功能:确定发送优先级,并包含标识符(Identifier)用于唯一标识发送者和接收者之间的通信关系。·组成:标准数据帧的仲裁场由11位ID和1位RTR位(远程发送请求位)组成。
2024-08-23 16:26:29
526
原创 CAN的简介
CAN网络通常由CAN控制器、CAN收发器和双绞线组成。负责处理数据的收发和协议转换。负责将控制器的数字信号转换为差分信号进行传输,同时也负责将总线上的差分信号转换为数字信号供控制器处理。终端电阻在高速CAN总线的两端分别连接一个电阻,称为终端电阻。终端电阻的主要作用是匹配总线阻抗,提高信号质量减少回波反射。一般来说,终端电阻的阻值为120Ω。2.1 总线拓扑图高速CAN闭环总线低速CAN开环总线2.2 电平标准CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。
2024-08-23 16:09:32
1398
原创 什么是BKP(备份寄存器)
当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。此外, BKP控制寄存器用来管理侵入检测和RTC校准功能。复位后,对备份寄存器和RTC的访问被禁止,并且备份域被保护以防止可能存在的意外的写操作。执行以下操作可以使能对备份寄存器和RTC的访问:20字节(中容量和小容量)/ 84字节(大容量和互联型)
2024-08-17 22:30:48
299
原创 SPI通信接口
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如 AT91RM9200。(360百科)
2024-08-15 20:16:07
373
原创 ADC的一些细节
总共 2 个 ADC(ADC1,ADC2),每个 ADC 有 18 个转换通道: 16 个外部通道、 2 个内部通道(温度传感器、内部参考电压)ADC1和ADC2的通道都相同,是采用分时复用来使用的外部的16个通道在转换时又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路。
2024-08-06 11:05:24
421
原创 ADC的介绍和工作原理
Analog-to-Digital Converter,指模拟/数字转换器什么是ADC:SUCH AS:。它有多达 18 个通道,。各通道的。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值ADC 的输入时钟,它是由经分频产生。
2024-08-04 22:49:32
446
原创 什么是DMA以及DMA的意义
1.1 DMA(Direct Memory Access,直接存储器访问)提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来说就无法使用。 1.2 DMA的意义 代替 CPU 搬运数据,为 CPU 减负。 1. 数据搬运的工作比较耗时间; 2. 数据搬运工作时效要求高(有数据来就要搬走); 3.
2024-08-02 19:20:26
6172
原创 窗口看门狗WWDG
1.1 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器。
2024-07-24 12:07:08
247
原创 定时器的计数模式 定时器中断时钟配置
PWM波形(Pulse Width Modulation,脉冲宽度调制波形)是一种占空比可变的脉冲波形。这种调制方式通过改变脉冲的宽度来控制电路中的信号强度和频率。具体来说,PWM波形中的高电平持续时间和低电平持续时间可以根据需要进行调整,从而实现对模拟信号电平的数字编码。PWM波形在各种领域都有广泛的应用,包括电源管理、电机控制、LED亮度调节等。此外,生成PWM波形的方法有多种,例如使用波形发生器、单片机或可编程逻辑器件等。频率 = 1/Ts占空比 = Ton / Ts。
2024-07-15 21:51:02
425
原创 STM32的定时器HAL库
1. STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。1.1高级定时器:TIM1,这是一个高级定时器,不仅具备基本的定时中断功能,还拥有内外时钟源选择、输入捕获、输出比较、编码器接口以及主从触发模式等多种功能。这使得TIM1能够适用于各种复杂的应用场景,为开发者提供强大的时间控制和信号处理能力。1.2通用定时器:TIM2、TIM3和TIM4。
2024-07-15 01:07:36
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人