自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一念之间、

生命不停,学无止境。

  • 博客(30)
  • 资源 (4)
  • 收藏
  • 关注

原创 C++学习笔记--类型转换函数

知道了普通类型可以转换成类类型,那么类类型可不可以向普通类型转换呢?为了求证,写几行测试代码试试:创建一个类,只包含一个私有成员变量,一个构造函数,一个普通成员函数。 class Test{ int mValue;public: Test(int i = 0) { mValue = i; } int value() ...

2017-11-30 13:33:26 313

原创 C++学习笔记--转换构造函数

在C中我们知道数据类型之间会进行隐式的类型安全转换,转换规则为小类型转大类型。下面看一些隐式转换的例子:  short s = 'a';//合法 unsigned int ui = 200;//合法 int i = -1000;//合法 double d = i;//合法上面语句都是合法的,要么同类型赋值,要么小类型往大类型赋值,当我们在进行数据...

2017-11-30 10:59:16 277

原创 C++学习笔记--前置++、后置++操作符

在C语言中我们学习了前置操作符和后置操作符,比如++i,--i,i++,i--,由于++和--属于同类型操作符,此处讲解均以++作为模型。首先问一个问题,i++和++i有何区别?i++就是先返回i的值然后再加1;++i则是先对i加1再返回i的值。这是一般的解释。工程中,在C/C++中单独的两条语句在编译器编译后并没有任何区别,实现的汇编代码是一样的。通过观察汇编代码发现确实没有...

2017-11-29 22:24:09 511

原创 C++学习笔记--陷阱!!逻辑操作符

逻辑操作符 && || !,在C语言中是经常使用的,C++是完全兼容了C的语法,那么又为什么说有陷阱呢?首先看逻辑操作符的原义:操作数只有两种值,真或假;逻辑表达式不需要全部计算完就能确定表达式的值;最终结果只能是真或假。int a = 0;int b = 1;if(a && b){ ... ...}当我们确定了表达式a的值后就能判断出逻辑表达式为为假,这就是所谓的短路法则,同理表

2017-11-29 19:58:29 172

原创 C++学习笔记--智能指针

我们知道当我们在堆空间中申请了一片内存后如果使用完毕后就应该释放,否则就会造成内存泄漏。这是所有程序员都基本知道的一个问题,即便都知道但还是出现了大量的因内存泄漏而导致的BUG,C++中并没有像Java语言中存在垃圾回收机制,而且指针还不能控制所指堆空间的生命周期,因为指针本身只是一个变量,它和堆空间的内存并没有任何关系,指针没了,但是堆空间还存在,既然C++是一门更贴近于生活的语言那么就应该对此

2017-11-29 15:20:11 219

原创 C++学习笔记--函数对象

什么叫做函数对象?干嘛用?函数对象就是通过对象来实现函数调用的功能,既然说到对象那么自然就想起了类,对的,函数对象就是在一个类里面实现函数调用操作符“()”的重载,那么它有什么用处,回忆一下函数有些什么特性,函数一旦调用就无法重来,局部静态变量处于函数内部,外部无法做出修改,使用全局变量虽然可以在函数更改,但是这又影响了使用,在不同条件下使用就得更改不同的初始状态,还是比较麻烦的,函数是全局的,是

2017-11-28 21:51:23 185

原创 C++学习笔记--数组操作符重载

首先问一下,在使用了string类后我们还能像在C中使用下标来操作数组的元素吗?当然可以啦,因为C++会最大限度的兼容C的用法,依然能够用下标操作单个字符。看下面一个逆序字符串例子:void reverseString(string &str) { int begin = 0; int end = str.length()-1; while(begin < e

2017-11-28 19:58:19 313

原创 C++学习笔记--字符串类

在C中并不支持字符串类型,只是通过使用字符数组和一组函数来进行字符串操作,由于C不支持自定义类型,所以无法获取字符串类型。C++完全兼容C,所以C++也没有字符串类型。从C到C++的过程中引入了制定会议类型的概念,我们可以通过类来完成对字符串类型的定义。所以经过前人的努力构建了一个字符串的类string类型,它直接支持了字符串连接,字符串大小比较,子串查找和提取,字符串插入和替换。使用字符串类时需

2017-11-28 16:20:23 295

原创 C++学习笔记--操作符重载

我们前面学过函数重载,知道全局函数之间可以重载,类普通成员函数和类静态成员函数之间可以进行重载,因为他们都是在同一作用域下进行的。那么重载有什么意义呢?除了函数能不能对操作符进行重载呢?重载的意义是通过函数名对函数功能或者参数列表对函数功能进行提示,或者扩展系统中已存在的函数功能。既然能扩展函数功能,肯定也能扩展操作符的功能。对于一个复数类,我们想要直接使用+-来进行复数对应实部虚部计算,

2017-11-27 16:01:26 230

原创 C++学习笔记--尴尬友元

什么叫做友元?它是C++中的一种关系,包括类与类之间和函数与类之间,友元关系是单向的,并且不能传递。为什么本节名字叫尴尬友元?因为由于友元的强大能力降低了程序的效率以及破坏了C++中的封装性,导致了在现代软件开发中已经几乎摒弃了这种能力。在类中,以friend关键字作为声明友元关系的关键字,一个类的友元可以是另一个类或者是一个函数,但是友元却并不是类中的一部分,存在友元关系的可以不受类中的访问

2017-11-26 22:42:32 296

原创 C++学习笔记--二阶构造模式

如何判断构造函数的执行结果?在构造函数中执行return语句会发生什么?构造函数执行结束是否意味着对象构造成功?在一般的构造函数中我们确实无法判断构造函数的执行结果,当我们在函数里添加bool标志虽然可以通过检测返回值但是终究不是一个好方法;在构造函数里如果添加了return语句的话,当执行到return语句时就会立即返回,如果是在初始化完成前返回的话就会产生一个半成品对象,这样的结果肯定不是

2017-11-26 19:29:27 426

原创 C++学习笔记--类的静态成员变量和静态成员函数

前面我们知道通过对象名能够访问类的public成员变量,每个对象都有自己专属的一套成员变量,不能在对象之间共享。当我们想统计在程序运行期间某个类产生的对象数目,并且不能使用全局变量,该怎么办?如何在类里实现这种数据共享的问题?C++提供了静态成员变量来解决这种问题,静态成员属于整个类所有,并不隶属于单独的某个对象,所有对象共享类的静态成员变量,它的生命周期为整个程序的运行周期,我们可以通过

2017-11-26 10:15:45 313

原创 C++学习笔记--const对象和this指针

const对象const关键字能够修饰对象,修饰的对象为只读对象,它的成员变量不允许被改变,但这只是编译阶段的概念,运行时无效,可以使用指针修改成员变量。既然有const对象,那么必然也存在const成员函数,但是它有什么特性呢?首先const对象只能调用const成员函数,const成员函数中也只能调用const成员函数,const成员函数中不能直接改写成员变量的值。const成员函

2017-11-25 23:50:18 367

原创 C++学习笔记--临时对象

C中最值得警惕的是野指针,C++最值得的就是野指针和临时对象了,临时对象是C++中的一个灰色地带了,那么它是如何产生的呢,答案是由于直接调用构造函数导致的。直接调用构造函数将产生一个临时对象,它的生命周期只有一条语句的时间,作用域也仅仅在一条语句中,当语句执行完就自动被析构了。class Test { int i;public: Test(int ret) {

2017-11-24 21:20:27 308

原创 C++学习笔记--析构函数

为了在使用对象结束后进行一些请理性的资源,C++给出了析构函数的定义,它的功能和构造函数相反,所以在声明上为~classname(),析构函数没有参数也没有返回值类型声明,所以它不可以被重载,析构函数也是被自动调用的。class Test{ int mi;public: Test(int i) { mi = i; printf("Test

2017-11-24 11:20:21 287

原创 C++学习笔记--初始化列表和类中的const成员变量

当我们在类里使用const定义一个成员变量会发生什么?能够通过构造函数直接初始化const定义的标识符吗?class Test{private: const int ci; int var1; int var2; int var3;public: Test() { //ci = 10;//error } in

2017-11-24 10:03:03 2658

原创 C++学习笔记--构造函数

当我们创建了一个类并定义了一个对象后并不显式初始化,我们知道对象成员变量的初始值是多少吗?是随机值还是0?答案是两者都有可能,在堆和栈上创建的对象成员初始值为随机值,在全局数据区创建的对象成员初始值为0。但是我们并不想它一会儿为随机值一会儿为0,想让它初始值为多少就为多少,又该怎么办?方法肯定是有的,在类里我们可以定义一个成员函数对成员变量进行赋值然后每次在创建对象后紧接着就调用初始化函数这样是不

2017-11-23 22:34:28 267

原创 C++学习笔记--再谈const和引用

前面提到过C++编译器在遇到const常量时会将字面常量放入符号表,编译中遇到时直接拿符号表里的值替换,const引用会生成一个只读变量,那么我们是否有必要深入分析一下const修饰的标识符什么时候为只读变量?什么时候为常量?const常量的判别准则:只有用字面量初始化的const常量才会进入符号表使用其他变量初始化的const常量仍然是只读变量被volatile修饰的const常

2017-11-22 10:25:49 1022

原创 C++学习笔记--类型转换

C中经常会用到强制类型转换,比如(type)(表达式),这种粗暴的类型转换方式存在比较大的问题,他可以对任意类型之间的表达式进行转换,但是编译器却无法判断其正确性,当出现BUG时也很难在源码中快速定位所有使用过强制类型转换语句,导致很难查错,可我们也知道,在工程应用中难免会必须使用强制类型转换的时候,那么如何更加安全可靠的进行强制类型?C++中提供一种新式类型转换方案,将所有的强制类型转换分为

2017-11-21 19:01:35 217

原创 C语言--函数指针简单使用

#include int max(int x,int y){ return x > y ? x : y;}int main(){ int (*p)(int,int) = &max;//&可以省略 int a,b,c,d; scanf("%d %d %d",&a,&b,&c); d = p(p(a,b),c); printf("max

2017-11-21 12:18:21 240

原创 C++学习笔记--new和namespace

内存申请 在C中我们学习了动态内存分配(小知识:一般动态分配回来的内存空间比需要的略大)的函数,为什么我们在C++中还要学习新的内存分配方式?那是因为C中的malloc、calloc、等都不是C中自带的,而是通过库函数调用得到的,对于一些不支持这些库编译器就无法使用。C++中使用new关键字(表面是C++自带的,不取决于编译环境使用)进行动态内存分配,在C中的动态内存分配是基于字节分配的,但是

2017-11-21 12:02:02 280

原创 C++学习笔记--函数重载

重载的意思是什么?就是同一个标识符在不同上下文中发挥不同的作用,比如‘洗’这个字,配上不同的事物就代表不同的意义,洗衣服、洗脸等等。从平时生活中的自然语言我们可以延伸到程序语言中,即对函数进行重载。函数重载函数重载就是用同一个函数名定义不同的函数,当同一个函数名和不同参数列表搭配时函数的意义不同。int func(int x){ return x;}int func(int

2017-11-21 10:19:22 251

原创 C++学习笔记--函数参数扩展和占位参数

默认参数 C++中可以在函数声明时为参数提供默认值,参数的默认值必须在函数声明中指定,还有一种函数是在main函数之前定义并实现的,这种也可以给函数参数提供默认值需要提醒的是:只能在函数声明时提供默认值,在后面的函数实现中提供默认值是错误的。当函数被调用时没有传入实参时,则使用默认值,例如:#include int sum(int x = 1, int y = 1, int z

2017-11-20 21:34:47 441

原创 C++学习笔记--内联

C++中的const常量可以替换宏常量,那么是否有一个方法可以替代宏对代码块的替换呢?有的,就是内联函数,在C++中推荐使用内联函数替代宏对代码的替换,在具体介绍内联函数之前我们可以看一个代码片段:#include #define FUNC(a, b) ((a) < (b) ? (a) : (b))int main(int argc, char *argv[]){ int a

2017-11-20 19:58:56 217

原创 C++学习笔记--引用

在进入正题前先回顾一下什么叫做变量。变量是一段连续物理空间的别名,在程序中通过变量来申请并命名存储空间,同样的通过变量也能使用一段存储空间。那么问题来了,一段连续的存储空间只能有一个别名吗?答案是否定的。在C++中增加了引用的概念,引用可以看做一个已定义变量的别名,它是个名词,用法如下:type& var_name = var;普通引用在定义时需要用同类型的变量进行初始化。例如:int a =

2017-11-19 19:55:15 163

原创 C++学习笔记--C到C++的扩展

今天是我正式学习C++的第一天,那么作为一个学习单片机和嵌入式的程序员来说为什么还要学习在应用软件方面用处比较广泛的C++呢?而不是努力深入学习C语言呢?最开始我也同意如此认为的,嵌入式方面都是和底层打交道的,那为什么要放弃它而往应用层上学习,学好C的同时再学习数据结构不就行了?操作系统和驱动程序什么的都是用C写的,那我们学好C不是就够用了吗?甚至有些大牛都觉得C++用处并不大,还有就是以后做驱动

2017-11-19 15:18:52 277

原创 Linux应用开发--静态函数库和动态函数库

什么叫库?就是一些函数经过一定的操作生成的可执行的二进制文件,能够被外部调用使用封装的函数。Linux应用程序所使用的主要函数库均存放于/lib和/usr/lib目录下,其中以*.so方式命名的是动态函数库,以*.a命令的是静态函数库,linux下进行链接时默认使用动态函数库,如果想要使用静态函数库时使用-static编译选项即可,比如:gcc -static hello.c -o hello

2017-11-14 19:32:56 813

原创 Linux应用开发--原子操作

对于操作一个文件,我们想在文件末尾追加一些内容,如果是单个进程的话那么能没有任何问题的完成任务,但如果多个进程都想给文件追加内容的话那就容易出问题了,出现什么问题呢?就是最后的操作结果根本就不是你能接受的了的。假定两个进程A和B都对同一个文件进行追加内容操作。两个进程都已经打开了该文件,但未使用O_APPEND标志。因此每个进程都有它自己的文件表项,他们有各自的文件状态标志和当前文件偏移,但是

2017-11-14 16:44:57 1551

原创 数据结构--单链表C实现

什么叫结构体?就是能够将不同数据类型集合在一起构造一个新的数据类型的东西,它有一个注意点就是不能引用自身作为结构体成员,为什么呢?因为在创建这种类型的结构体变量时计算机无法得知给结构体变量分配多大的内存导致编译器报错,提示非法操作。那么为什么计算机无法给结构体变量分配某个固定内存呢?是这样的,如果你的结构体原先已经存在两个int型变量了,如果计算机是四字节对齐的话那么结构体类型目前已经占据了8个字

2017-11-14 16:20:12 320

原创 数据结构--线性表C实现

数据结构的初学者,在此分享一些学习小成果。     我们将一堆数据形如A1,A2,A3,,,,An有序排列称为含有n个元素的线性表。一般情况线性表的实现都是基于数组实现的。在线性表的使用中,我们需要实际估计表的大小以动态申请空间足够的的数组容量,由于稳妥起见,一般都需要将空间估算得大一些,所以就导致了空间浪费,这也是它的一个比较严重的缺点。但是,在一些比较小的地方并且我们能够大致估计容量时就可

2017-11-13 23:14:53 312

基于STM32的智能节水控制系统

本次设计一种IC卡刷卡收费节水控制系统实现对水资源的有效管理,拒绝浪费,节约用水。该系统采用IC射频卡作为系统控制钥匙来控制出水时间及出水量,这是利用一种现代无线射频感应技术,通过用户预估使用水量对应的时间达到节约用水的目的。通过键盘输入预设时间,经确认后刷卡认证一下即可出水,同时显示剩余时间和射频卡剩余水费,并控制电磁阀打开水龙头;显示预扣设定水费开始倒计,用完停水;中途如需停用按水控机上的暂停键即可,按下恢复键继续出水。 系统主要分为七大部 1、MCU控制器:STM32F103C8T6 2、按键部分用于设置时间和暂停出水操作 3、电源为普通数据线实现5V供电 4、存储芯片用于保存对应IC卡所剩余额 5、射频卡用于用户验证,蜂鸣器做提示工作 6、OLED显示屏显示所有信息,包括剩余时间和剩余水费,以及一些提示性界面 7、继电器和LED灯共同模拟水龙头的开关和工作状态

2021-03-28

基于STM32的语音功能的电子密码锁

本套智能入户门系统是基于STM32单片机的控制下实现的密码开锁和语音控制开锁。一、当用户在矩阵键盘上输入密码确认完成后由单片机驱动继电器打开电子锁模块,三次失败则报警。二、当选择单片机通过语音模块进行语音识别后与单片机中存储的信息进行匹配,在信息匹配正确的情况下由单片机驱动继电器模块打开电子锁模块然后打开房间的智能门系统。三、该系统支持报警功能、修改密码功能、显示信息功能。

2021-03-28

基于STM32的家庭安防控制系统

设计了一种基于互联网的家庭安防监控系统,实现防盗、防火、燃气泄漏、报警、通信等功能。对家的安全进行多方位的监测。 .该系统采用STM32F103C8T6做为主控对该监测系统进行控制,利用现代传感技术及WiFi通信技术。对室内烟雾,火焰,陌生人员进出,燃气进行监控并能通过WiFi进行数据实时传输及报警的新型安防监控装置。利用各类传感器对室内环境进行监测,通过OLED显示采集到的数据,通过蜂鸣器作为报警响应。

2021-03-28

基于stm32的电子密码锁

基于STM32单片机的控制下实现手机端与单片机通信,使用到stm32单片机、蓝牙模块、液晶显示、密码存储与更改、系统自动报警、4*4矩阵键盘、蓝牙调试助手 支持功能:键盘上设定好六位密码,可以在键盘上改密码, 用键盘输入设定的正确密码按确认后开锁,输入错误密码达到3次系统报警,使用手机接收到系统的蓝牙信号打开调试助手输入正确密码开锁,输入错误密码达到3次报警,液晶显示,用于直观地提示用户输入开锁密码、密码信息的正误提示、开锁信息的显示等,显示整个电子密码锁的工作状态。

2020-12-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除