首页 » C++

学编程选择哪个语言?——编程语言人员需求和难度分析

       1、C语言  C语言主要用于驱动开发、操作系统、内核开发,嵌入式(单片机)、交换机、路由器等网络设备的开发。  ①、偏硬件方面,相当于目前互联网和移动时代,可能薪资水平会低一些。如果之前学习电子自动化的或者对硬件感兴趣的,可以选择这个方向。  人员需求:★★★★   难度指数:★★★★  ②、偏向底层开发的:难度很大,比如要看懂Linux内核代码。简单说,如果你读书的时候,数学物理不是很厉害的,不阅读全文 »

2017年5月15日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++ 对象的内存布局

       对象的影响因素   简而言之,我们一个类可能会有如下的影响因素:  1)成员变量  2)虚函数(产生虚函数表)  3)单一继承(只继承于一个类)  4)多重继承(继承多个类)  5)重复继承(继承的多个父类中其父类有相同的超类)  6)虚拟继承(使用virtual方式继承,为了保证继承后父类的内存布局只会存在一份)  上述的东西通常是C++这门语言在语义方面对对象内部的影响因素阅读全文 »

2017年5月12日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

编程语言 5 月排行榜:Java 和 C 下跌厉害

       TIOBE 最近公布了 2017 年 5 月编程语言指数排行榜,排名前三的还是 Java、C、C++,Python 和 C# 排第四和第五。自从 2016 年开始,Java 和 C 的比率数据在下降。和去年同期相比,两者已下降超过 6%。流失的部分,哪些编程语言受益了呢?嗯,是其他语言都受益了。  随着越来越多的领域采用软件,C(底层软件开发)和 Java(高级软件开发)显然无法都满足了。阅读全文 »

2017年5月9日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

一篇文章看明白 C++ 虚函数表

       C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。阅读全文 »

2017年4月14日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C/C++返回内部静态成员的陷阱

       在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。  这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。阅读全文 »

2017年3月29日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(十)

       上一篇中我们已经得到了一个比较完善的游戏,不过有人反馈说目前的难度较大,第三关已经很难通过了。今天我们来做点小的修改。  如果你认为我们要通过调整参数降低游戏的难度,那你就错了。作为游戏的开发者,我们最大的优势就是拥有上帝视角,可以随意让游戏按照我们的要求变化。  添加奖励  目前的三滴血不太够用,我们添加一个功能,每得到500分就另外获得一滴血。实现起来很简单,只需要在计算分数的时候修改就好阅读全文 »

2017年3月20日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(九)

       现在我们的游戏已经初具规模,但如果主战坦克一直是无敌状态那也很无趣。今天我们来让敌人的炮火发挥作用。  主战坦克被击中  当敌人的炮弹和主战坦克接触时,主战坦克生命值减一。我们预设的主战坦克共有三条命,被击中三次后游戏结束。  为主战坦克添加碰撞检测大家应该很熟悉,修改之前的CheckCrash()函数如下:...阅读全文 »

2017年3月15日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(八)

       上一篇中设计出了关卡和分数,但每新开始一个新的关卡时没有任何提示信息,这样略显突兀。我们需要在每一个关卡开始之前给出一个提示信息,同时让玩家有休息的时间。 绘制提示信息 我们要在Battle区域中,显示一个矩形,中间打印关卡号。效果如下:  实现起来也很容易,在Graphic类中添加一个ShowGameLevel函数:...阅读全文 »

2017年3月13日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(七)

       目前我们的主战坦克已经能够开炮击毁敌人坦克了,但敌人坦克不会开炮貌似比较欺负人。今天我们让敌人坦克也拥有开炮功能。同时,我们要为游戏设定关卡,让它变得好玩起来。  让敌人坦克开炮  在EnemyTank类中,添加Shoot函数几乎和MainTank中完全相同,... 这里唯一的区别是最后一句话,我们对m_bNeedShoot属性进行了赋值。敌人坦克和主战坦克最大的区别在于自动开炮,它不像主战坦克那阅读全文 »

2017年3月8日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(六)

       上一篇中,我们的主战坦克发出的炮弹还没有实际的作用,今天我们就让它拥有击毁敌军坦克的功能。  新增基础API  Rect类  在Rect类中,我们添加下面两个新接口。 ... 这两个函数的作用是返回矩形右上角和左下角的两个点。这样方便我们在计算炮弹是否击中坦克时使用。阅读全文 »

2017年3月6日
作者:鸡啄米 分类:软件开发 浏览: 评论:2

C/C++产生随机数的方法

       c库伪随机数发生器  rand  srand  大多时候用时间产生随机发生器的seed c++11 引入的伪随机数发生器.随机数抽象成随机数引擎和分布两部分.引擎用来产生随机数,分布产生特定分布的随机数 常用的就是线性均匀分布 uniform_int_distribution uniform_real_distribution阅读全文 »

2017年2月17日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(五)

       上一篇中我们给主战坦克添加了发射炮弹的功能。不过有一个问题,炮弹飞到战场边缘时,自动消失的感觉不太好。我们今天来给炮弹加上一个爆炸的效果。  爆炸功能  爆炸的效果不仅仅用在炮弹上,当坦克被击中后也应该有这么一个爆炸效果。我们给所有的元素都抽象一个爆炸的功能,放在Object类中。阅读全文 »

2017年1月4日
作者:鸡啄米 分类:软件开发 浏览: 评论:3

C++实战项目:坦克大战(四)

       上一篇中,我们添加了可以自动行驶的敌人坦克,今天我们给主战坦克添加最核心的功能——开炮。  第一次重构  既然要开炮,就要有炮弹。我们自然就想到要新建一个炮弹类。为了符合我们之前的设计思想,我们需要给这个新的炮弹类找一个基类。用Tank类作基类貌似不太合适,于是,我们要重构代码。  我们创建一个全新的Object类作为今后程序中所有类的基类。阅读全文 »

2016年12月30日
作者:鸡啄米 分类:软件开发 浏览: 评论:1

C++实战项目:坦克大战(三)

       战场范围  之前我们的坦克从战场的一边走出之后会从另一边重新进入战场。这样不符合我们游戏的定义。我们需要把它们改成遇到战场边就不能再继续向前走了。  主战坦克  修改MainTank.cpp中的Move方法...阅读全文 »

2016年12月27日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C++实战项目:坦克大战(二)

       这一篇中,我们继续继续进行我们的坦克大战。 位置信息数据结构  在游戏设计过程中,需要记录大量的位置信息,如果仅仅使用(x,y)坐标很容易出错。这一篇中,我们先定义两个简单的数据结构用来保存点和矩形的信息。 在项目中新建Model目录,创建下面四个文件:... 这个头文件创建了一个Point类,有两个成员变量m_x,m_y用来记录一个点的横、纵坐标。阅读全文 »

2016年12月13日
作者:鸡啄米 分类:软件开发 浏览: 评论:3

C++实战项目:坦克大战(一)

       对坦克大战情有独钟是因为大学时候第一次参加程序设计比赛就做的这个游戏。当时用的语言是Java,那个比赛让我悟出了面向对象的强大之处,我也是从那时开始接触设计模式的。对我而言,坦克大战有着非同寻常的意义,所以一定要带大家用C++实现一下。 知识准备 建议大家先看看面向对象编程的三个重要特性,之后再来学习后面的内容。 代码分享 这个项目中的代码会在GitHub上发布,里面的每一个分支对应着简书中的每阅读全文 »

2016年12月7日
作者:鸡啄米 分类:软件开发 浏览: 评论:8

编程语言间的战争

       1 桌面时代  古老的C 王国从1972诞生以后, 一直都非常强大, 这里的臣民对它又爱又恨, 因为它的法律允许它的臣民直接操作内存,执行效率极高, 但是又对内存分配回收不管不顾,全部扔给子民们去处理。  其实纯粹的C语言还是比较简单的, 只要你能真正的搞懂指针是怎么回事 , C++诞生以后,在C的基础上又加入了面向对象, 泛型编程等“时髦”概念阅读全文 »

2016年9月28日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

C/C++面试中碰到这种字符串指针的题你能得几分

       许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。阅读全文 »

2016年9月27日
作者:鸡啄米 分类:软件开发 浏览: 评论:2

30年程序生涯26种语言 看我与“Hello World”的往事

       我最近在7月4日的那一周休了一个假,因此有时间来回顾我的职业生涯。令我震惊的是,我已经写了近30年的代码了!于是,我决定好好利用这段额外的休息时间来创作一篇怀旧的帖子,回顾在过去近30年时间中我工作过的编程语言。向我从“Hello, World”开始学习新语言的30年致敬。 我学习的第一种编程语言是TI BASIC,BASIC专门为微软TI 99 / 4A microcomputer而编写的一种语阅读全文 »

2016年9月8日
作者:鸡啄米 分类:软件开发 浏览: 评论:0

结构体和类的内存字节对齐详解

       先说个题外话:早些年我学C程序设计时,写过一段解释硬盘MBR分区表的代码,对着磁盘编辑器怎么看,怎么对,可一执行,结果就错了。当时调试也不太会,又根本没听过结构体对齐这一说,所以,问题解决不了,好几天都十分纠结。后来万般无奈请教一个朋友,才获悉可能是结构体对齐的事,一查、一改,果真如此。 问题是解决了,可网上的资料多数只提到内存对齐是如何做的,却鲜有提及为什么这样做(即使提,也相当简单)。阅读全文 »

2016年5月11日
作者:鸡啄米 分类:软件开发 浏览: 评论:1