自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 第十七课:数组类模板

(一)数组类模板参数可以使数值型参数(非类型参数)template <typename T,int N>{T a[N];//使用模板参数定义局部数组}func<double ,10>();(二)数值型模板参数的限制1:变量不能作为参数模板2:浮点数不猛作为模板参数3:类对象不能作为模板参数本质:1:模板参数是在便一阶段被处理的单元,因此在编译阶段必须准确的唯一确定。(三)数组类template class HeapArray{private:int

2021-02-01 11:33:57 257

原创 第十五课:类模板的概念和意义

(一)类模板的主要作用1:一些类主要用于村塾和组织数据元素2:类中数据组织的方式和数据元素的具体类型无关,如:数组类,链表类,stack类,queue类等c++中将模板的思想应用于类,是的类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。(二)c++中的类模板1:以相同的方式处理不同的类型2:在类声明前使用template进行标识3:用于说明类中的使用的泛指类型template class Operator{public:T op(T a,T b)};(三)类模板的应

2021-01-31 13:59:07 812

原创 第十四课:多参数模板

(一)函数模板可以定义任意多个不同类型的参数template<typename T1,typename T2,typename T3>T1 Add(T2 a,T3 b){return static_cast(a+b);}int r = Ass<int ,float,double>(0.5,0.8);(二)对于多参数函数模板1:无法自动推导返回值类型2:可以从左向右部分指定类型参数//T1 = int, T2 = double,T3 = doubleint r1

2021-01-31 13:04:14 435

原创 第十二课:c++中的抽象类和接口

(一)面向对象中的抽象概念在进行面向对象分析时,会发现一些抽象的概念!比如,图形的面积如何计算?在现实中需要知道具体的图形类型才能求面积,所以对概念上的“图形”求面积是没有意义的!class shape{public:double area(){return 0;}};shape 只是一个概念上的类型,没有具体的对象!(二)什么是抽象类?1:可用于表示现实世界中的抽象概念2:是一种智能定义类型,而不能产生对象的类3:只能被继承并重写相关函数4:直接特征是相关函数没有完整的实现

2021-01-30 21:23:28 117

原创 第十一课:c++对象模型分析

(一)回归本质1:class是一种特殊的struct2:在内存中class依旧可以看做变量的集合3:class与struct遵循相同的内存对齐规则4:class中的成员函数与成员变量是分开存放的5:每个对象都有独立的成员变量6:所有对象共享类的成员函数(二)运行时的对象退化为结构体的形式1:所有成员变量在内存中一次排布2:成员变量间可能存在空隙3:可以通过内存地址直接访问成员变量4:访问权限关键字在运行时失效5:类中的成员函数位于代码段中6:调用成员函数时对象地址作为参数隐式传递

2021-01-30 15:29:31 159

原创 第十课:多态的概念和意义

(一)函数重写回顾1:父类中被重写的函数依然会继承给子类2:子类中重写的函数将覆盖父类中的函数3:通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print();//从父类中继承c.print();//在子类中重写p->print();//父类中定义(二)面向对象中期望的行为1:根据实际的对象类型判断如何调用重写函数2:父类指针(引用)指向**父类对象则调用父类中定义的函数**子类对象则调用子类中定义的重

2021-01-29 21:41:45 69

原创 第九课:操作符重载

(一)操作符重载:可以将操作符重载函数定义为类的成员函数1:比全局操作符重载函数少一个参数(坐操作数)2:不需要依赖友元就可以完成操作符重载3:编译器优先在成员函数中寻找操作符重载函数class Type{public:Type operator sign(const Type& p){Type ret; return ret;}}小结:1:操作符重载是c++的请打特性之一2:操作符重载的本质是通过函数扩展曹福的功能3:operato关键字是实现操作符重载的关键

2021-01-27 20:31:41 61

原创 第八课:函数重载

(一)函数重载1:函数重载的本质互为相互独立的不同函数2:c++中通过函数名和函数参数确定函数调用3:无法直接通过函数名得到重载函数的入口地址4:函数重载必然发生在同一个作用域中(二)类中的成员函数可以进行重载1:构造函数的重载2:普通成员函数的重载3:静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?(三)重载的深度的意义1:通过函数名对函数功能进行提示2:通过参数列表对函数用法进行提示3:扩展系统中已经存在的函数功能小结:1:类的成员函数之

2021-01-27 20:03:27 68

原创 第七课:二阶构造模式

(一)关于构造函数1:类的构造函数用于对象的初始化2:构造函数与类同名并且没有返回值3:构造函数在对象定义时自动被调用4:只提供自动初始化成员变量的机会5:不能保证初始化逻辑一定能成功6:执行return语句后构造函数立即结束7:构造函数能决定的知识对象的初始化状态,而不是对象的诞生(二)二阶构造(就是分两步来构造一个对象)1:工程开发中得构造过程可分为-资源无关的初始化操作,即不可能出现异常情况的操作;需要使用系统资源的操作,即可能出现异常情况,如:内存申请和访问文件小结:1:构造函

2021-01-27 19:37:57 93

原创 第六课:类的静态成员变量和静态成员函数

在c++中可以定义类的静态成员变量1:静态成员变量属于整个类所有2:静态成员变量的生命周期不依赖于任何对象3:可以通过雷鸣直接访问静态成员变量4:所有对象共享类的静态成员变量5:可以通过对象名访问共有静态成员变量静态成员变量的特性1:在定义时直接通过static关键字修饰2:静态成员变量需要在类外单独分配空间3:静态成员变量在程序内部位于全局数据区语法规则:Type ClassName ::VarName = value;小结:1:类中可以通过static关键字定义静态成员变量2

2021-01-27 16:12:07 221

原创 第五课:经典问题汇集一

(一)析构顺序1:对于栈对象和全局对象,类似于入栈和出栈的顺序,最后构造的对象最先被析构!!2:堆对象的析构发生在使用delete的时候,与delete的使用顺序相关!!(二)关于const对象的疑问1:const关键字能否修饰类的对象?如果可以,有什么特性?答:const关键字能够修饰对象;const修饰的对象为只读对象;只读对象的成员不变量不允许被改变;只读对象是编译阶段的概念,运行时无效(三)c++中的const成员函数1:const对象只能调用const的成员2:const成员函数中

2021-01-26 11:11:37 54

原创 第四课:c++类的构造

c++类的构造#include using namespace std;class Test{private:int i;int j;public:int getI(){ return i;}int getJ(){return j;}};Test ht;int main(){Test t;Test* pt = new Test;cout << “Hello World!” << endl;cout << ht.getI() <&l

2021-01-25 19:53:25 272

原创 第三课:类与封装的概念

封装的基本概念–根据经验:并不是类的每个属性都是对外开放的**例如:女孩子不希望外人知道自己的体重**例如:男孩子不希望别人知道自己的身高和收入而一些类的属性是对外公开的例如:人的姓名,学历,国籍等**–必须在类的表示法中标定义属性和行为公开级别,就类似于文件系统中的权限1:c++中类的封装–成员变量:c++中用于表示类属性的变量-成员函数:c++中用于表示类行为的函数–c++中可以给成员函数和成员变量定义访问级别public:即公开访问级别,成员函数和成员变量可以再类的内部和外部访问和

2021-01-25 19:03:08 100

原创 第二课:c++中的动态内存分配

1:c++中的动态内存分配-c++中通过new关键字进行动态内存申请-c++中的动态内存申请是基于类型进行的-delete关键字用于内存释放变量申请:Type* pointer = new Type//****//delete pointer;Type pointer = new Type [N ]//*****//delete[ ] pointer;new关键字与malloc函数的区别:-new关键字是c++的一部分-malloc是由c库提供的函数-new一具体类型为单

2021-01-25 09:46:32 58

原创 第一课:c++应用的本质

1.c++中引用的理解(1)在c++中新增加了引用的概念–引用可以看做一个已经定义的变量的别名–引用的语法:Type& name = var;int a = 4;int& b = a;//b为a的别名吧= 5; // 操作b就是操作a注意:普通引用在定义时必须用同类型的变量亮进行初始化。(2)引用在c++中的内部实现是一个指针常量Type& name;`` Type& name;void f(int& a) .

2021-01-24 20:11:41 89

原创 指针的本质

变量的回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存数空间?int i= 0;int j = 0;//指针声明int* p = &i;//取值j=*p;1:在指针声明时,* 号表示所声明的变量为指针2:在指针使用时, * 号表示取指针指向的内存空间的值#includeint

2018-01-11 19:54:54 291

原创 STM32单片机的串口通信波特率应该这样计算

什么是波特率不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。STM32波特率相关的寄存器STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。 该寄存器的有效位数为16位,

2018-01-10 19:33:18 7909

翻译 嵌入式工程师常用的IIC和SPI总线协议,今天来说透!

现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是这两种通信协议非常适合近距离低速芯片间通信。Philips(for IIC)和Motorola(for SPI) 出于不同背景和市场需求制定了这两种标准通信协议。IIC 开发于1982年,当时是为了给电视机内的CP

2018-01-10 19:18:14 6998

原创 SDRAM的引用

1.SDRAM:syncronized dynamic random access memory,同步动态随机存储器 DDR:ddr就是ddr,sdram,是sdram的升级版。(ddr:double rate,双倍速率的sdram) ddr有好多代,比如ddr1,ddr2,ddr3,ddr4,lpddr(low power ddr) 2.SDRAM的特性 容量大,价格低,掉电易失性

2018-01-10 18:45:32 257

转载 https://www.cnblogs.com/dolphin0520/archive/2011/09/17/2179466.html

在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。

2017-12-23 11:30:37 1225

空空如也

空空如也

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

TA关注的人

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