- 博客(252)
- 资源 (3)
- 收藏
- 关注
原创 赋值操作符重载
1 关于赋值的疑问什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?编译器为每个类默认重载了赋值操作符。默认的赋值操作符仅完成浅拷贝。当需要进行深拷贝时必须重载赋值操作符。赋值操作符与拷贝构造函数有相同的存在意义。编程实验:默认赋值操作符重载#include <iostream>#include <string>using n...
2018-02-08 18:07:43
794
原创 函数对象分析
1 客户需求函数可以获得斐波那契数列每项的值。每调用一次返回一个值。函数可根据需要重复使用。编程实验:第一个解决方案#include #include using namespace std;int fib(){ static int a0 = 0; static int a1 = 1; int ret = a1; a1
2018-02-05 17:48:41
474
原创 数组操作符的重载
1 问题string类对象还具备C方式字符串的灵活性吗?还能直接访问单个字符串吗?2 字符串类的兼容性string类最大限度地考虑了C字符串的兼容性。可以按照使用C字符串的方式使用string对象。编程实验:用C方式使用string类#include #include using namespace std;int main(){ string
2018-02-01 17:43:14
503
原创 C++种的字符串类
1 历史遗留问题C语言不支持真正意义上的字符串;C语言用字符数组和一组函数实现字符串操作;C语言不支持自定义类型,因此无法获得字符串类型。2 解决方案从C到C++的进化过程引入了自定义类型;在C++中可以通过类完成字符串类型的定义;问题:C++中的原生类型系统是否包含字符串类型? 不。3 标准库中的字符串类C++ 语言直接支持C语言的所有概念;C+...
2018-01-31 16:09:25
434
原创 初探C++标准库
1 有趣的重载操作符其意义是将整数1按位左移2位,即:0000 0001 -> 0000 0100重载操作符,将变量或常量左移到一个对象中!编程实验:重载左移操作符#include const char endl = '\n';class Console{public: Console& operator int i) {
2018-01-29 16:17:43
252
原创 完善的复数类
1 完善的复数类利用操作符重载 统一复数与实数的运算方式统一复数与实数的比较方式编程实验:复数类的实现Complex.h#ifndef _COMPLEX_H_#define _COMPLEX_H_class Complex{ double a; double b;public: Complex(double a = 0, do
2018-01-28 20:49:34
380
原创 LCD1602和12864显示器
1 LCD显示器相关背景1.1 LCD简介(1)显示器,常见显示器。(2)LCD(Liquid Crystal Display),液晶显示器,原理介绍。(3)LCD应用领域。(4)LED OLED。1.2 电子显示器的原理(1)像素(分辨率)。(2)显存,用来做显示的内存。(3)字模。(4)字库。(5)控制器和驱动器。(6)软件+硬件实现功...
2018-01-28 19:53:46
10417
1
原创 操作符重载的概念
1 需要解决的问题下面的复数解决方案是否可行?编程实验:复数的加法操作#include class Complex { int a; int b;public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } in
2018-01-27 17:51:35
304
原创 类中的函数重载
1 函数重载的回顾函数重载的本质为相互独立的不同函数;C++中通过函数名和函数参数确定函数调用;无法直接通过函数名得到重载函数的入口地址;函数重载必然发生在同一个作用域中。2 类中的重载类中的成员函数可以进行重载: 构造函数的重载普通成员函数的重载静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?普通成员函数和静态成员函
2018-01-26 17:06:28
343
原创 友元的尴尬能力
1 友元的概念什么是友元?友元是C++中的一种关系;友元关系发生在函数与类之间或者类与类之间;友元关系是单项的,不能传递。 函数是类的友元。2 友元的用法在类中以friend关键字声明友元;类的友元可以是其它类或者具体函数;友元不是类的一部分;友元不受类中访问级别的限制;友元可以直接访问具体类的所有成员。3 友元的语法编程实
2018-01-26 11:59:43
312
原创 二阶构造模式
1 构造函数的回顾关于构造函数: 类的构造函数用于对象的初始化;构造函数与类同名并且没有返回值;构造函数在对象定义时自动被调用。2 问题1.如何判断构造函数的执行结果?(目前无法判断) 2.在构造函数中执行return语句会发生什么?(构造函数直接 返回,执行结束) 3.构造函数执行结束是否意味着对象构造成功?(不)编程实验:异常的构造函数#inclu
2018-01-24 21:26:43
513
原创 AD和DA转换
1 AD转换及其相关背景知识1.1 基本概念(1)什么是AD转换?A(A,analog,模拟的,D,digital,数字的)现实世界是模拟的,连续分布的,无法被分成有限份; 计算机世界是数字的,离散分布的,是可以被分成有限份的; AD转换就是把一个物理量从模拟的转换成数字的。(2)AD转换的意义?(3)什么情况下需要AD转换。1.2 AD转换的原理(1)比较
2018-01-24 20:06:19
49531
3
原创 类的静态成员变量和静态成员函数
1 成员变量的回顾通过对象名能够访问public成员变量。每个对象的成员变量都是专属的。成员变量不能在对象之间共享。2 新的需求统计在程序运行期间某个类的对象数目。保证程序运行的安全性(不能使用全局变量)。随时可以获取当前对象的数目。编程实验:解决方案的尝试#include class Test{private: int mCount
2018-01-23 20:42:54
986
原创 I2C通信之EEPROM
1 EEPROM及其背景知识1.1 EEPROM(1)一些概念:ROM、RAM、PROM(可编程ROM)、EPROM(可擦除ROM)、EEPROM(电可擦除ROM)。(2)为什么需要EEPROM(单片机内部的ROM只能在程序下载时进行擦除和改写,但是程序运行本身是不能改写的。单片机内部的RAM中的数据程序运行时可以改,但是掉电就丢失了。有时候我们有一些数据要存在系统中,要求掉电不丢
2018-01-23 17:29:21
15932
原创 神秘的临时对象
1 有趣的问题下面的程序输出什么?为什么?实例分析:有趣的问题#include class Test { int mi;public: Test(int i) { mi = i; } Test() { Test(0); } void print() { printf("mi
2018-01-23 11:36:45
350
原创 对象的销毁
1 对象的销毁生活中的对象都是被初始化后才上市的。生活中的对象被销毁前会做一些清理工作。问题:C++ 中如何清理需要销毁的对象?一般而言,需要销毁的对象都应该做清理。解决方案: 为每一个类提供一个public的free函数;对象不再需要时立即调用free函数进行清理。存在的问题: free只是一个普通的函数,必须显示的调用;对象销毁前没有做清理,很可能造成
2018-01-22 20:36:46
750
原创 对象的构造顺序
1 问题C++ 中的类可以定义多个对象,那么对象构造的顺序是怎么样的呢?2 对象的构造顺序对于局部对象 当程序执行流到达对象的定义语句时进行构造。下面程序中的对象构造顺序是什么?实例分析:局部对象的构造顺序#include class Test{private: int mi;public: Test(int i) {
2018-01-21 11:04:06
508
原创 初始化列表的使用
1 问题类中是否可以定义const成员?小实验下面的类定义是否合法? 如果合法,ci的值是什么,存储在哪里?class Test{private: const int ci;public: int getCI(){return ci;}};// 编译通过但是定义对象时编译出错。编程实验:类中的const成员#include clas
2018-01-20 11:15:14
359
原创 实时时钟DS1302
1 RTC有关的背景知识1.1 什么是实时时钟(rtc for real time clock)(1)时间点和时间段的概念区分。(2)单片机为什么需要时间点。(3)RTC如何存在于系统中(单片机内部集成 or 单片机外部扩展)。1.2 DS1302介绍(1)数据手册。(2)SPI数字接口访问。(3)内部存着一个时间点信息(年月日时分秒星期几),可以读写,上电
2018-01-19 19:55:54
3036
原创 对象的构造
1 问题:对象中成员变量的初始值是多少?小实验:下面的类定义中成员变量i和j的初始值是多少?编程实验:成员变量的初始值#include <stdio.h>class Test{private: int i; int j;public: int getI() { return i; } int getJ() { retur...
2018-01-16 16:54:22
299
原创 类的真正形态
1 类的关键字问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了!struct在C语言中已经有了自己的含义,必须继续兼容。在C++中提供了新的关键字class用于类定义。class和struct的用法是完全相同的。class和struct有什么区别在使用struct定义类时,所有成员的默认访问级别为public。在用class定义类时,所有成员的
2018-01-16 11:29:13
262
原创 串口通信和RS485
1 通信有关的常见概念1.1 什么是通信(1)人和人之间的通信:说话、写信、狼烟、手势等。(2)人和计算机之间的通信:按键、显示器、鼠标、触摸屏等。(3)计算机和计算机之间的通信?1.2 通信的关键(1)事先约定。(2)基本信息单元。(3)有效信息的编码、传输和解码。1.3 通信的专业性概念(1)同步和异步。(2)单工、半双工、全双工。(
2018-01-16 09:58:32
22648
4
原创 类与封装的概念
1 类的组合电脑一般而言是由CPU、内存、主板、键盘和硬盘等部件组合而成。思考 (1)学习电脑组装需要多少时间? (2)学习电脑组装是否需要学习显示器、键盘、鼠标、主板、内存等部件的设计与制造?2 类的封装类通常分为以下两个部分 类的实现细节类的使用方式当使用类时,不需要关心其实现细节;当创建类时,不需要考虑其内部实现细节。例: 普通
2018-01-15 11:17:11
795
原创 直流电机和步进电机
1 直流电机1.1 什么是电机…1.2 常见电机(1)交流电机:两相、三相。(2)直流电机:永磁、励磁。(3)步进电机、伺服电机。1.3 直流电机详解(1)外观。(2)接线和工作原理。(3)直流电机的驱动问题:不能用IO口直接驱动。1.4 直流电机实验(1)直流电机直接接在开发板的主板的VCC和GND引出接口上看电机是否转动,还可以调
2018-01-14 16:50:40
6821
原创 进阶面向对象
1 你考虑过么?日常生活中,我们都习惯对事物进行分类。那么,这种分类的思想是否可以引入程序设计中呢?2 面向对象的基本概念面向对象的意义在于将日常生活中习惯的思维方式引入程序设计中;将需求中的概念直观的映射到解决方案中;以模块为中心构建可复用的软件系统;提高软件产品的可维护性和可扩展性。类和对象是面向对象中的两个基本概念:类:指的是一类事物,是一个抽
2018-01-14 11:20:24
223
原创 蜂鸣器
1 蜂鸣器的原理1.1 无源蜂鸣器原理(1)早期的蜂鸣器都是无源的。(2)内部结构和材料。(3)发声原理。(4)控制信号,是高低电平相间的方波。(5)电路图。(6)音调如何控制,音调受震动频率控制,就等于控制信号的频率。频率越高音调越高,听起来越刺耳。(7)声音大小如何控制,由硬件决定的,没法写代码去控制声音大小。1.2 有源蜂鸣器(1)无源蜂鸣
2018-01-12 12:41:12
2807
原创 新型的类型转换
1 C 方式的强制类型转化语法: (Type)(Expression)Type(Expression)如:typedef void(PF)(int);struct Point{ int x; int y;};int v = 0x12345;PF* pf = (PF*)v;char c = char(v);//gcc编译不通过,g++编译通过Poin
2018-01-12 11:36:13
248
原创 命名空间
1 C++中的命名空间在C语言中只有一个全局作用域C语言中所有的全局标识符共享同一个作用域标识符之间可能发生冲突。C++中提出了命名空间的概念:命名空间将全局作用域分成不同的部分;不同命名空间中的标识符可以同名而不会发生冲突;命名空间可以相互嵌套;全局作用域也叫默认命名空间。注意:不同的命名空间中可以定义相同命名的全局变量和函数,但是调用的时候必须采用 命名空间名字:
2018-01-11 16:50:59
285
原创 C++中动态内存分配
1 动态内存分配C++中的动态内存分配 C++中通过new关键字进行动态内存申请。C++中的动态内存申请是基于类型进行的。delete关键字用于内存释放。如:变量申请: Type *pointer = new Type; //…… delete pointer;数组申请: Type *pointer = new Type[N]; //…
2018-01-11 16:46:40
296
原创 C和C++相互调用
1 C++和C相互调用实际工程中C++和C代码相互调用是不可避免的。C++编译器能够兼容C语言的编译方式。C++编译器会优先使用C++编译的方式。extern关键字能够强制让C++编译器进行C方式的编译。extern “C”{ // do C-style compilation here}编程实验:C++调用C函数// add.c#include "
2018-01-11 11:19:16
225
原创 定时器和计数器
1 定时器介绍1.1 什么是定时器(1)SoC的一种内部外设。(2)定时器就是CPU的“闹钟”。1.2 什么是计数器(1)定时器就是用计数的原始实现的。(2)计数器可以计算外部脉冲个数。1.3 定时器如何工作(1)第1步:先设置好定时器的时钟源(如果需要的话)。(2)第2步:初始化时钟相关寄存器。(3)第3步:设置定时时间(计数个数)。(4)
2018-01-11 10:14:22
9975
原创 函数重载分析
1 自然语言中的上下文你知道下面词汇中“洗”的含义吗?洗衣服、洗脑、洗脸、洗车、洗马桶……结论:能和“洗”字搭配的词汇有很多,“洗”字和不同的词汇搭配有不同的含义。2 重载的概念重载(Overload):同一个标识符在不同的上下文有不同的意义。如: “洗”和不同的词汇搭配有不同的含义:洗衣服、洗脑、洗脸、洗车、洗马桶……“play”和不同的单词搭配有不同的含义:pl
2018-01-10 11:18:55
295
原创 函数参数的扩展
1 函数参数的默认值C++中可以在函数声明时为参数提供一个默认值。当函数调用时没有提供参数的值,则使用默认值。参数的默认值必须在函数声明中指定,不能在定义中指定。问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的默认值不同时是否会发生错误?实例分析:默认参数值初探#include int mul(int x = 0);int mai
2018-01-08 16:55:23
341
原创 内联函数分析
1 常量与宏回顾C++ 中const常量可以替代宏常数定义,如: const int A = 3; #define A 3C++中是否有解决方案替代宏代码片段呢?2 内联函数C++中推荐使用内联函数替代宏代码块。C++中使用inline关键字声明内联函数。inline int fun(int a, int b){ return a < b ? a :
2018-01-07 17:30:13
225
原创 按键
1 按键相关知识1.1 按键工作原理(1)内部机械结构。(2)电路连接与原理图中图标。(3)按键电路接法、上拉电阻。上拉是为了让引脚默认是高电平,但是上拉的力量扛不住接地,所以按键没有按下时上拉的力量保证了IO引脚输入为1,而按下后绝对为0。(4)按下和弹起的区。区别就是接不接地的问题,也就是引脚输入为1还是0的问题。(5)按键这个设备对我们的意义:按键对于我们CPU来
2018-01-07 16:25:43
667
原创 内存这个大话题
1 程序运行为什么需要内存1.1 计算机程序运行的目的计算机为什么需要编程?编程已经编了很多年,已经写了很多程序,为什么还需要另外写程序?计算机有这个新的程序到底为了什么?程序的目的是为了去运行,程序运行是为了得到一定的结果。计算机就是用来计算的,所有的计算机程序其实都是在做计算。计算就是在计算数据。所以计算机程序中很重要的部分就是数据。计算机程序 = 代码 + 数据。计算机程
2018-01-05 17:33:01
660
原创 引用
1 变量名回顾变量是一段实际连续存储空间的别名;程序中通过变量来申请并命名存储空间;通过变量的名字可以使用存储空间。问题:一段连续的存储空间只能有一个别名吗?2 引用的基本概念在C++中新增加了引用的概念: 引用可以看作是一个已定义变量的别名;引用的语法:Type& name = var;int a = 4;int& b = a; // b是a的别
2018-01-04 12:08:06
261
原创 LED点阵
1 LED点阵简介1.1 什么是LED点阵(1)外观。(2)作用。(3)内部构造原理图。点阵的优势就是8+8个IO口独立控制8*8个LED亮灭。(4)LED点阵如何工作。1.2 如何驱动LED点阵(1)单片机端口直接驱动。要驱动8*8的点阵需要2个IO端口(16个IO口)、要驱动16*16的点阵需要4个IO端口(32个IO口)。(2)使用串转并移位锁存器驱动
2018-01-03 17:37:59
3396
原创 进化后的const分析
1 C语言中的constconst修饰的变量是只读的,本质还是变量。const修饰的局部变量在栈上分配空间。const修饰的全局变量在只读存储区分配空间。const只在编译器有用,在运行期无用。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。C语言中的const使得变量具有只读属性。const将具有全局生命周期的变量存储于只读存储区。const
2018-01-03 16:49:17
291
原创 C到C++的升级
1 C和C++的关系C++继承了所有的C特性。C++在C的基础上提供了更多的语法和特性。C++的设计目标是运行效率与开发效率的统一。2 C到C++的升级2.1 变量定义C++更强调语言的实用性。所有的变量都可以在需要使用时再定义。2.2 register关键字register关键字请求编译器将局部变量存储于寄存器中。在C++中依然支持register关键字(存在的目的就是为了兼容C语
2018-01-03 11:51:22
412
嵌入式实时操作系统ucos2
2018-06-09
c语言深度剖析(完美高清文字版pdf)
2018-05-21
图解TCP/IP
2018-05-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人