首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++类与对象深度解析(一):从抽象到实践的全面入门指南

private:_year、_month、和_day是私有成员,不能在类外部直接访问,只有类的成员函数能访问这些变量。...1.3 类域 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作 ⽤域操作符指明成员属于哪个类域。...2.2 对象的大小与存储 当类被实例化为对象时,对象的大小取决于类的成员变量。成员变量需要分配空间,但成员函数不会在对象中存储。成员函数是存储在单独的代码段中的一段指令。...为什么会崩溃? 在 Print() 函数中,除了输出 A::Print() 以外,代码还试图访问类的成员变量 _a。...总结来说,空指针调用成员函数本身并不会报错,因为成员函数本来就不在类中,所以不是解引用,编译时的汇编代码这里就只是一段函数的地址而已,只是这里没有对象,传过去的this指针就是空指针,但只要该成员函数不涉及访问成员变量或其他依赖对象内存的操作那就不会报错

9900

【C语言篇】自定义类型:联合体和枚举详细介绍

每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息 图书:书名、作者、⻚数 杯⼦:设计 衬衫:设计、可选颜⾊、可选尺⼨ 直接写代码如下: struct gift_list {...⼤端(存储)模式: 是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举? 枚举的优点: 增加代码的可读性和可维护性 和#define定义的标识符⽐较,枚举有类型检查,更加严谨。...但是在C++是不⾏的,C++的类型检查更严格 便于调试,预处理阶段会删除 #define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使...,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!

10110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    自定义类型: 联合体和枚举

    前言 : 书接上文, 下面我将继续详解C语言的剩下两个自定义类型: 联合体和枚举 个人主页 : 酷酷学!!! 正文开始 1....每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。...enum Color//颜⾊ { RED=2, GREEN=4, BLUE=8 }; 2.2 枚举类型的优点 为什么使⽤枚举? 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?...便于调试,预处理阶段会删除 #define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 2.3 枚举类型的使用 举个栗子: enum Color...在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。 完

    9910

    小程序云开发:菜鸟也能全栈做产品

    于是仰天长啸:我就想独立做一个完整的产品为什么这么难?年轻人,这一切都不怪你…… 破局:小程序云开发# 为什么使用小程序云开发来破局? 为啥是用“小程序云开发”来破局?...且看下面的表格: 能 力 作 用 说 明 云函数 无需自建服务器 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 数据库 无需自建数据库 一个既可在小程序前端操作,也能在云函数中读写的...“存储”中;这里的“云函数”就是我们需要实现的后端业务逻辑,他就是一个个的函数(函数由我们自己写好后上传)。...,超简单,1 分钟写完,诚不欺我。...至此我们我们介绍完了,小程序云开发的功能。虽然,我只贴出了少量的代码,即保存商品,和提交订单。由于时间和篇幅有限,我不可能把整个完整的程序代码贴出来。

    1.1K41

    联合体和枚举

    每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息 图书:书名、作者、⻚数 杯⼦:设计 衬衫:设计、可选颜⾊、可选尺⼨ 直接写代码如下: struct gift_list {...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举? 枚举的优点: 增加代码的可读性和可维护性 和#define定义的标识符⽐较,枚举有类型检查,更加严谨。...但是在C++是不⾏的,C++的类型检查更严格 便于调试,预处理阶段会删除 #define 定义的符号 使⽤⽅便,⼀次可以定义多个常量 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使...,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!...,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!

    5310

    uWSGI和WSGI之间的关系(上)

    web服务器,或者wsgi server服务器,他的任务就是接受用户请求,由于用户请求是通过网络发过来的,其中用户到服务器端之间用的是http协议,所以我们uWSGI要想接受并且正确解出相关信息,我们就需要...uWSGI把接收到的信息作一次简单封装传递给Django,Django接收到信息后,再经过一层层的中间件,于是,对信息作进一步处理,最后匹配url,传递给相应的视图函数,视图函数做逻辑处理……后面的就不叙述了...我们过一会再来讨论 我们可以用这条命令:python manage.py runserver,启动Django自带的服务器,具体叫什么名字,我真不知道(知道的可以留言)。...是默认是单进程单多线程的,对于同一个http请求,总是先执行一个,其他等待,一个一个串行执行。无法并行。而且django自带的web服务器性能也不好,只能在开发过程中使用。...但是uWSGI也不够好,为什么看下图。

    68310

    C语言:自定义类型——联合和枚举

    这里为什么打印出来的是11223355呢,我们根据3个特点,可以分析画出un的内部布局图 充分说明了特点3!...1.5 使用联合体节省空间的例子 ⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。 每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。...1.6 运用联合体判断大小端 1.7 利用联合体打印存储的字节内容 既然可以判断大小端,那其实也可以直接把存储的情况打印出来!!这是一个很神奇的代码!...、枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 枚举有作用域的概念,在一个函数内部使用,出了函数就不能用了,但是#define定义的标识符没有作用域概念,他是一个全局都可以使用的常量。...2.3 枚举类型的使用 使用方法:使⽤枚举常量给枚举变量赋值 那是否可以拿整数给枚举变量赋值呢? 在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐ 较严格。

    27110

    自定义类型:结构体

    这三部分中,一部分存储书名,一部分存储作者名,一部分存储价格。...很显然的是,第二种所占的内存要小一点,所以我们要让占用空间小的成员尽量集中在一起。 为什么存在内存对齐? 1....平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定 类型的数据,否则抛出硬件异常。 2....原因在于,为了访问未对齐的内存,处理器需要 作两次内存访问;而对齐的内存访问仅需要⼀次访问。假设⼀个处理器总是从内存中取8个字节,则地 址必须是8的倍数。...答案是:首选print2函数。 原因: 函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。 如果传递⼀个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下 降。

    11410

    学习经验谈:Unity3d开发中最佳语言还是C#

    的支持与选择,说明了unity3d 的战略意图: 1:首先unity3d 选择C#,是因为微软这棵大树下有巨量的程序员,并且C#在网络开发方面成绩很优秀 2:为什么在选择Mono这个基于C#的开源框架..., Mono是一个由 Novell 公司(先前是 Ximian )主持的项目,众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x、ME、NT、2000...那Unity3d公司的发展将会有多宽广吧,Unity公司,目前正在上升期,虽然目前的unity3d 3.0版,在功能上与同类框架基本持平,除了价格底,支持iphone,androd平台等等小优势以后,再无长处...{有的框架都开始支持PSP开发了,有的都能用程序作 表情动画了….}...库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。.NET框架也不例外,包含了许多类库。另外,把程序转换成可执行形式以及运行执行文件时,编译器和运行环境是必不可少的。

    1.6K10

    【C语言】函数

    为什么叫形式参数呢?实际上,如果只是定义了 Add 函数,⽽不去调⽤的话, Add 函数的参数 x和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。...strlen作为了函数printf的一个参数,使得代码更加简洁,这就是函数的链式访问 3.有趣的练习: 请思考以下代码的输出结果: 答案: 解析:    为什么会出现这个结果呢?...3.extern和static (1)变量的生命周期和作用域    作用域:⼀段程序代码中所⽤到的名字并不总是有效(可⽤)的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域 局部变量的作⽤域是变量所在的局部范围...修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。...但是作⽤域不变的 static修饰全局变量    ⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤。

    10910

    C语言——函数(2)

    为什么是这样的运行结果呢?我们就需要了解printf函数了。 在前面我们提到了两个网站,我们可以选择一个来进行搜索, 我们可以知道printf函数返回的是 打印在屏幕上的字符个数 。...作用域和生命周期 作⽤域(scope)是程序设计概念,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤)的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。 1....static修饰局部变量 改变了变量的⽣命周期 ,⽣命周期改变的本 质是 改变了变量的存储类型 ,本 来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。...存储在静态区的变 量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了, 只有程序结束,变量才销毁 ,内存才回收,但是 作⽤域没有发生改变 。...函数的要求 内聚性强 函数的功能尽量单一(一个函数不要混合太多的功能) 耦合性弱 与其他函数的相互影响尽量少 所以我们一般不推荐过多地使用全局变量,降低了程序的可靠性和通用性

    6510

    C++语言基础篇(二)

    全局/静态存储区:分为初始化和未初始化两个相邻区域,存储初始化和未初始化的全局变量和静态变量。 常量存储区:存储常量,⼀般不允许修改。 代码区:存放程序的⼆进制代码。...3、C++ 中 const 和 static 关键字(定义,⽤途) static 作⽤:控制变量的存储⽅式和可⻅性。...但是要注意的是,虽然⽤ static 对局部变量进⾏修饰之后,其⽣命周期以及存储空间发⽣了 变化,但其作⽤域并没有改变,作⽤域还是限制在其语句块。...,对类的所有对象只有⼀份拷⻉; 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因⽽只能访问类的 static 成员变 量。...所以不能在类的声明中初始化 const 数据成员, 因为类的对象在没有创建时候,编译器不知道 const 数据成员的值是什么。const 数据成员的初始化只能在类的构 造函数的初始化列表中进⾏。

    59510

    C语言结合体和枚举的魅力展现

    顾名思义,联合体是一种特殊的数据类型,可以存储不同类型的数据,但同一时刻只能存储其中一种类型的数据。...我们知道了它们是用的用一块地址,具体是怎么样的我画图来给大家看看。 这是union在内存中的存储。 1.3 对齐数 虽然联合体的内存是是共⽤同⼀块内存空间的,但也是有最大对齐数的。...每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。...⽐较枚举有类型检查,更加严谨 便于调试,预处理阶段会删除#define 定义的符号 4.枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤ 使⽤⽅便,⼀次可以定义多个常量 总的来说...在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐ 较严格。 结构体、联合体和枚举类型到这里就结束了,观众老爷们 ✨✨欢迎点赞☕️☕️收藏✍✍评论

    9010

    嵌入式学习书籍推荐

    做嵌入式开发指针更显得尤为重要,所以做嵌入式开发除了掌握位操 作、限定词等,对指针的掌握是不可或缺的。而且要掌握多级指针、函数指针等等。涉及到指针,那么就会讲到内存分配。...一 名优秀的程序员必定是通过“体力劳动”再转向“脑力劳动的”,这也是为什么我们要有“写不出代码=0”思想的原因所在。 如果说C语言相当于文字,那么数据结构就相当于在造句、写文章。...代码质量有一部分取决于对数据结构的掌握程度。在数据结构部分我们要把链表、树、排序作 为学习重点。...而且我们也可以查看一些比较常见的函数(如strcopy、strcat、printf等)在内核中是如何实现的,以及编写代码模拟堆栈,这 不仅有利于编写代码质量的提高,而且还可以初步了解Linux内核精髓,...作为一个从事嵌入式软件开发的小白,我感觉,当你静下心来读完这些书的时候,你必定能在嵌入式领域站稳脚跟,愿诸君共勉。

    1.7K41

    联合体类型和枚举类型

    每⼀种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。...为什么使⽤枚举?...我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举? 枚举的优点: 1. 增加代码的可读性和可维护性 2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。...便于调试,预处理阶段会删除 #define 定义的符号 4. 使⽤⽅便,⼀次可以定义多个常量 5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。...(也能声明在函数外,此时就能在全局使用)。而#define定义的常量都是在全局使用的,不会被限制到只能在函数内使用。 总结 所以目前我们就讲解完了联合体和枚举 。

    11310

    类和对象(上)(C++)

    1.3 类域 • 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作⽤域操作符 指明成员属于哪个类域。...( 与命名空间同理 ) • 类域影响的是编译的查找规则,下⾯程序中Init如果不指定类域Stack,那么编译器就把Init当成全 局函数,那么编译时,找不到array等成员的声明/定义在哪⾥...⾸先函数被编译后是⼀段指令,对象中没办法存储,这些指令存储在⼀个单独的区域(代码段),那么对象中⾮要存储的话,只能是成员函数的指针。...请看如下例子: 上⾯的程序运⾏后,我们看到没有成员变量的B和C类对象的⼤⼩是1,为什么没有成员变量还要给1个字节呢?因为如果⼀个字节都不给,怎么表⽰对象存在过呢!...this指针访问的,如Init函数中给_year赋值, this- >_year = year; • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显

    9710

    撮合引擎开发:完结篇

    以上五个函数就只有第一个函数会比较复杂,为了让处理流程更容易理解,我就不贴代码了,画一个完整的流程图给大家看看: ?...这个流程确实有一点复杂,可以多看几遍好好消化,最好自己动手将其转为代码实现。 其他几个函数就简单了,关于最后一个函数需要补充说明一下。...请看该函数的代码以理解该函数的逻辑和用法: func (q *orderQueue) getDepthPrice(depth int) (string, int) { if q.parentList.Len...1. limit 普通限价是最简单的,前文也已经展示过代码实现,为了加深理解,我再给大家画一张图: ? 处理逻辑就是: 1.判断新订单是买单还是卖单。...2. limit-ioc IOC 限价与普通限价不同的地方只有一个,如果新订单和头部订单不匹配时,普通限价单会被添加到订单队列中,而 IOC 限价则是作撤单处理,请看下图: ?

    94030

    C语言(5)----函数

    那么为什么C语言中会有函数呢?因为C语言作为一种语言,它只提供一种语法规则,本身并不能执行程序。...总而言之就是一定要先声明才能使用函数。 12.关于多个文件的存储 当我们需要写大量的代码的时候,放在同一个文件中就会显得函数臃肿而且不好修改,那么我们就会把它们分门别类放在不同的文件中。...这样做的优点有很多: 方便协作:多个人之间可以操作同一组代码 逻辑清晰:分开存储使得代码更有逻辑性 隐藏代码:有时候不想让人看见的源码可以放在另一个文件中 13.static和extern关键字 介绍两个概念...局部变量的作⽤域是变量所在的局部范围。 2. 全局变量的作⽤域是整个⼯程 生命周期:指的是一个函数的存在的时间长短。变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。...但是需要注意的是它的作用域并未变化,原先能在哪里发挥作用,现在还是在哪里。 对于全局变量和函数,它们被static修饰之后的变化相差无几。

    9410
    领券