03 2022 档案
摘要:数据类型及API声明 双向链表是指链表的每个结点有两个指针域,一个next指针指向后继结点,一个previous指针指向前驱结点。另外,双向链表也包含一个游标slider。 //链表句柄 typedef void DoubleLinkedList; //链表结点 typedef struct Dou
阅读全文
摘要:数据类型及API声明 循环链表是指首尾相连的链表,尾部元素指向头部元素,本文使用的模型是尾部元素指向0位置元素,而不是指向链表头。 //链表句柄 typedef void CircleList; //循环链表的结点 typedef struct CircleListNode CircleListNo
阅读全文
摘要:数据类型及API声明 线性表的链式存储是指每个结点都含有一个指针域,指针域指向下一个结点,这样每个节点包含了自身信息和下一个结点的位置,像链条一样连在一起,线性表的链式存储就是我们常说的链表。一般来说,我们都会给链表加一个表头,表头的指针域指向链表的第一个元素(链表的0号位置),在表头中可以存储链表
阅读全文
摘要:数据类型及API声明 线性表的顺序存储是指各元素按顺序依次排列存储在一段连续内存的数据结构。 //线性表数据类型 typedef void LinearList; //线性表结点数据类型 typedef void LinearListNode; //线性表的表头数据类型 typedef struct
阅读全文
摘要:嵌入式中常用显示器 CRT显示器:Cathode Ray Tube,阴极射线管显示器。现在已经很少使用,而是使用功耗更低、成本更低的轻薄的液晶显示器。(基本淘汰) LCD显示器:Liquid Crystal Display,液晶显示器。液晶是一种介于固体和液体之间的有机化合物,其本身不发光,依靠背光
阅读全文
摘要:STL中常用算法的算法原型整理如下 //查找重复元素 _NODISCARD _FwdIt adjacent_find(const _FwdIt _First, _FwdIt _Last, _Pr _Pred); _NODISCARD _FwdIt adjacent_find(const _FwdIt
阅读全文
摘要:文章目录 前言 一、搭建一个测试框架 二、分析for_each源码 1.分析for_each的函数参数和返回值 2.定义函数对象 3.for_each函数的返回值 4.for_each源码浅析 三、函数对象的本质 1.函数对象的回调行为 2.函数对象和回调函数的区别 四、完整代码 总结 前言 本文中
阅读全文
摘要:string 1. string和char*有什么区别呢? string是类,而char*是一个指向字符串的指针;string是一个char *类型的容器,它封装了char *,以及字符串操作相关的函数,并且string可以自动管理内存,不用考虑内存回收和访问越界问题。 2. string类中at成
阅读全文
摘要:前言 在STL容器中有一种集合容器set,set容器内部元素唯一并按照一定规则顺序排列。下面将通过set容器装入基本数据类型和类对象的实例,在程序中一步步分析函数对象的本质和使用方法,并延伸出自己在学习STL时的一些心得体会。 话题引出:set容器自动排序的实现 我们首先定义一个int类型的set容
阅读全文
摘要:背景:在嵌入式开发中,有时候我们在协议中发送或者收到的数字都是十进制数字,而我们在人机交互时,需用通过字符串类型来显示该十进制数字,这就经常需要对十进制数字和数字字符串进行相互转换。 说明:下面给出的4个工具函数,在使用时可以直接调用。以下工具函数中,说明了函数的功能,函数参数以及函数的返回值。并且
阅读全文
摘要:当我们throw出类对象时,使用catch捕获异常时有三种选择,分别是捕获对象元素、捕获引用和捕获指针,那么这三种情况下,捕获到的变量是如何分配内存,他的生命周期又是如何呢,首先结论如下: 捕获类对象的元素:调用拷贝构造函数把抛出的对象元素拷贝给catch的参数对象元素,调用拷贝构造函数;捕获类对象
阅读全文
摘要:通过抛异常可以直接把异常的信息抛出来,在捕获异常的时候直接打印异常信息,下面通过一个简单的例子说明,更高级的用法请看这篇博文 【异常机制高级讲解】异常与多态综合案例https://blog.csdn.net/qq_43471489/article/details/123522592?spm=1001
阅读全文
摘要:构造函数和析构函数没有返回值,不能像C语言那样用不同的返回值来判断错误的情概况,所以可以通过异常机制来处理错误的情况。 下面给出一个综合案例,该案例包含了异常、多态、类内部包含类、深拷贝、操作符重载、虚函数重写、等综合性知识。(该综合案例将C++的很多语法结合在一起,综合性较强,值得反复练习调试)
阅读全文
摘要:关于异常机制请看这篇文章,附链接: C++异常机制详解https://blog.csdn.net/qq_43471489/article/details/123495003栈解旋是指,在抛出异常的时候,在try语句块内部,抛异常前所有在栈上构造的对象都将会被析构。下面通过程序举例说明: #inclu
阅读全文
摘要:首先把可能会发生异常的语句放在try语句内,然后通过catch语句接异常,接异常的时候是严格按照类型匹配的(不像函数参数可以进行隐式类型转换)。而抛异常的时候,通过throw语句抛出异常,然后直接转到接收该类型的异常的catch语句处执行,throw后面的语句不再执行,抛出异常的函数后面的语句不再执
阅读全文
摘要:C语言中的类型转换 在C语言中,类型转换有隐式类型转换和强制类型转换,例: 1. 隐式类型转换 可以转换基础类型,指针类型不能隐式类型转换。 int a = 97; char c1 = a; //隐式类型转换 cout << c1 << endl; //打印结果为字符 'a' 2. 强制类型转换 c
阅读全文
摘要:首先我们知道,在类中,static关键字修饰的成员属于整个类,即类定义的所有关键字共享同一个static成员,如果不了解可以查看这篇博文: 《类中的静态成员详解:static关键字》https://blog.csdn.net/qq_43471489/article/details/123029686
阅读全文
摘要:首先创建一个类的.h和.cpp文件,分别如下 UserVector.h文件 #pragma once //只包含一次 #include <iostream> using namespace std; template<typename user_t> class UserVector { publi
阅读全文
摘要:位带操作实现了通过普通的加载/存储等指令对单一的1bit进行读写的功能。也就是说把1bit膨胀为32bit的字来操作(位带操作就是用一个地址代表一个比特,正常来说一个地址代表的是32bit,一次性操作的也是32bit)。 比如: #define LED0 PBout(1) //其中 PBout(1)
阅读全文
摘要:函数模板是指函数逻辑结构相同,但是参数类型不同的一类函数的抽象,即类型参数化。引用官方描述如下: 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。 下面写一个函数模板的实例,通过实例分析函数模板的语法和使用规
阅读全文
摘要:驱动的官方解释 首先,用官方一些的话来描述一下驱动的定义: 驱动,计算机软件术语,是指驱动计算机里软件的程序。驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,没有驱动,计算机中的
阅读全文
摘要:C语言中的volatile关键字 基本概念:在C语言中,volatile关键字修饰的变量是表示该变量是易变的,要求编译器不优化对该变量的读取。 当我们需要读取一个变量的值时,编译器为了加快访问速度,一般会在缓存中读取该变量的值,而不会直接去寄存器中去取值。我们在嵌入式开发时,经常要和各种开发板打交道
阅读全文
摘要:文章目录 前言一、问题引出,为什么要有多态?二、多态的基础知识1.类型兼容性原则2.重载重写重定义3.动态联编与静态联编 三、多态案例四、虚函数1.虚函数表与 vptr 指针2.虚析构函数 系列文章 前言 面向对象有三大特点:封装、继承、多态。封装可以把属性和方法封装在一个类中,这样当类对象做函数参
阅读全文
摘要:在C++中通过虚函数重写可以实现多态效果,即同一个调用语句,传入不同参数产生不同的状态。在C语言中,通过函数指针做函数参数其实也可以实现这个效果,下面通过计算图形面积的实例来实现C语言多态,通过同一个调用语句,传入不同图形函数来打印面积。 #define _CRT_SECURE_NO_WARNING
阅读全文
摘要:文章目录 前言函数指针语法数组指针与指针数组 前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通过函数指针间接调用函数: int get_num(int a, int b) { return a + b; }
阅读全文
摘要:文章目录 一、类成员的访问控制二、继承三、继承中的构造与析构函数调用顺序四、多继承五、多继承的二义性与虚继承系列文章 一、类成员的访问控制 C++类成员的访问控制主要有三种权限,分别是: public:可在类内部使用、可在派生类内部使用、可在类外部使用; protected:可在类内部使用、可在派生
阅读全文
摘要:1.ASCII码是什么? ASCII码是计算机用来表示字符的一个数,也就是说只有字符才有ASCII码,比如我们说1的ASCII码是49,是指字符’1’,而不是整形1。ASCII码的形式可以是十进制、十六进制等,这个表示形式是对程序员来说的,比如’1’的ASCII码十进制表示为49,十六进制形式为0x
阅读全文
摘要:在嵌入式开发中,我们经常需要对数据类型进行各种转换,在使用emWin设计界面时,我们为TEXT控件、EDIT控件、BUTTON控件等设置显示内容的时候经常需要字符串类型的变量,比如在设计软键盘时,我们可能会对键盘按键BUTTON的显示做修改,使其显示数字0-9或者字符’a’-‘z’,但是设置BUTT
阅读全文
摘要:前言 在C++中有很多运算符,有单目运算符、双目运算符、三目运算符等,运算符重载使我们可以根据自己的需求实现加减乘除等各种运算,是不是所有运算符都可以重载呢?重载的运算符函数如何去确定函数原型呢?重载的方法分为成员函数法和友元函数法,那么他们有什么不同呢?下面就通过具体的运算符重载程序来详细分析如何
阅读全文