本人原本一菜鸟java程序员,但业余涉猎还算广泛,稍微了解些C++内容。主要之前曾爱好过汇编语言。所以对于C语言能从汇编层面加以理解,C++则是在此基础上又加了面向对象、stl等一类东西嘛。

这次做了C++项目,也算是机遇,当时公司恰好有个C++项目需要人手,那时又没有java的话,我就自告奋勇接过来了。

否则我一个java程序员是没机会实践C++的。

项目就是图形界面的windows桌面程序,是一个管理员软件,和某款生物识别设备有 一定交互。要管理用户、管理员的信息、指纹等内容。

接下来主要记一些反思项:

1,字符串方面我一开始用了许多,char数组,或char*,进行字符串操作不方便。C++中最好多用string。

2,少用memcpy这类直接操作内存的函数,因为这类函数是要写明读写多少字节的。如果某一个数组长度改写了,而memcpy函数长度忘了改,那么对内存的操作就会越界了。

C语言也有更好的操作字符串的函数、strcpy,strcat。

3,这次项目我选择了mysql数据库,因为个人对mysql比较熟悉。

但实际上做C++的桌面程序 和 java的b\s结构的项目思路有些差别,前者很多情况下简易、轻巧为妙,数据库适合选用SQLite这种内嵌的数据库,或者干脆存储本地文件。

mysql这种数据库,首先要单独安装配置,最好也要弄个服务器,麻烦。

4,界面方面有个好的界面库,积累一套成熟的写法 真的很重要。

很常见的需求有  点击列表项右键弹出菜单、动态添加控件、多选列表、显示图片、选择日期等等。

我用的界面库有htmlayout,duilib。 都是基于基本的windows程序设计。暂时还不会mfc。一开始我是借鉴一个前辈的项目,他是只用htmlayout,我觉得这个库是真鸡巴垃        圾,自己又学习了duilib解决了不少问题。

5,数据结构方面我一开始都是用结构体数组,后来发现C++的stl库里list很好用,类似java的List。

好的数据结构的库能让工作事半功倍。

6,C++内存管理是难点,堆内存都要自己清理,经常会在这方面出错,很难调试。

7,和设备交互,好的通讯库是基石,一开始用的是socket的库,后来改为hid。一开始这方面还是让我很头痛的尤其hid,对其机制并不是很理解,经常写错,后来公司前辈提供了很常熟的库,直接调用就好。

8,一些耗时很久的操作,如注册指纹、验证信息等,如果不写在线程里,界面会卡顿。

这种时候多线程的用途就体现出来了。

9,最后代码觉得写的是真有点乱,那种自己改代码很轻松(就是复制黏贴比较多),但以后别人接手的话只能让上帝保佑他了。

10,数据库各方面技术真的很重要。这也是我早就意识到的。

11,用了好多全局变量,有些是有道理的,有些我觉得不太好看,主要是觉得自己的C++还是不够面向对象。

除了全局变量,界面之间、线程之间、不同的cpp之间该怎么交流,以后要好好思考下。
12,觉得以后应该多用namespace。

13,有些地方,不写注释就担心别人看不懂,一般就意味着 这段代码写得很狗屎。

14, 用最新版本的vs。

15,开发界面一定要对用户的操作及时反馈,例如用户验证成功,要弹出对话框提示用户验证成功。否则用户看界面没反应会很蒙。
  另一方面就是要对删除操作进行提示,弹出对话框问用户是否确认删除。

  不做这些工作,那就是用户体验不好。

16,做工具性质的管理软件,最重要的不是界面漂亮,而是清晰、整洁、规整、合理、易懂。

17,要考虑不同电脑上 屏幕分辨率不同 对界面的影响。

如果只是单纯的windows程序,不同分辨率界面会错乱。

如果是用界面库,则一定要用合适的界面布局。

个人需要提升的方向:

1,多线程。

2,通讯。

3,数据库。

4,其他各种基本功。

最重要的一是基本功,二是经验。

最后想说,作为一个软件工程师,C++和java二者兼攻是很有必要的。许多遇到的强人也都是这样的。
具体不解释。

第一次做C++项目的一点小总结的更多相关文章

  1. 如何自学PHP做一个网站 PHP可以做什么项目?网站 小程序 公众号能用PHP开发吗?

    很多想从事程序开发的人员,想自学一门语言,不知道从哪里下手学习,如何入门学习?今天我们就以PHP为例子,来讲述一下如何快速的学习一门开发语言,让你快速入门.PHP是一个什么语言?它能开发什么项目呢?下 ...

  2. 最近做的一个Spring Boot小项目,欢迎大家访问 http://39.97.115.152/

    最近做的一个Spring Boot小项目,欢迎大家访问 http://39.97.115.152/,帮忙找找bug,网站里有源码地址 网站说明 甲壳虫社区(Beetle Community) 一个开源 ...

  3. BUI Webapp用于项目中的一点小心得

    接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...

  4. 迅雷创始人程浩:创业公司5招做好内部创新(组建小型敢死队:一共3个人,一个产品经理,两个研发;腾讯做不做这个项目是一个伪命题;让用户来验证,而不是相反 good)

    欢迎关注“创事记”的微信订阅号:sinachuangshiji 文/程浩 编者按:本文首发于微信公众号“浩哥说”(ID:haogetalks),作者程浩,迅雷创始人.内容为作者在混沌AI成长营上的演讲 ...

  5. 关于win8开发的一点小总结

    我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...

  6. 记录第一次在egret项目中使用Puremvc

    这几天跟着另一个前端在做一个小游戏,使用的是egret引擎和puremvc框架,这对于我来说还是个比较大的突破吧,特此记录下. 因为在此项目中真是的用到了mvc及面向对象编程,值得学习 记录第一次在e ...

  7. 手把手教你做JavaWeb项目:登录模块

    现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用 ...

  8. 基于 Source Generators 做个 AOP 静态编织小实验

    0. 前言 上接:用 Roslyn 做个 JIT 的 AOP 作为第二篇,我们基于Source Generators做个AOP静态编织小实验. 内容安排如下: source generators 是什 ...

  9. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

随机推荐

  1. Innodb单表数据物理恢复

    本文将介绍使用物理备份恢复Innodb单表数据的方法 前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数 ...

  2. 微信小程序从零开始开发步骤(一)

    从零到有写一个小程序系列专题,很早以前就想写来分享,但由于项目一直在进展,没有过多的时间研究技术,现在可以继续分享了.1:注册用没有注册过微信公众平台的邮箱注册一个微信公众号, 申请帐号 ,点击 ht ...

  3. [Flow] The Fundamentals of Flow

    Install: yarn global add flow-typed /*get type defination*/ yarn add flow-bin -D For example you hav ...

  4. BZOJ 2783 树 - 树上倍增 + 二分

    传送门 分析: 对每个点都进行一次二分:将该点作为链的底端,二分链顶端所在的深度,然后倍增找到此点,通过前缀和相减求出链的权值,并更新l,r. code #include<bits/stdc++ ...

  5. 学习web开发遇到几个细节问题

    1.在jsp中使用jsp表达式在input标签中时,避免直接和结束"/"相连 2.提取input select 标签内的内容,使用...value提取其值 3.form中含有一个o ...

  6. Crystal Report - 水晶报表导出文件的格式设置

    水晶报表中自带的导出和打印功能用起来确实很方便,只不过有时候需要导出的文件并不需要那么多种类型,在网上找到一些朋友的代码总结了一下,可以通过代码实现自定义导出文件类型 首先需要定义一个枚举: publ ...

  7. 【codeforces 534A】Exam

    [题目链接]:http://codeforces.com/contest/534/problem/A [题意] 给你n个人,要求任意两个编号相邻的人不能相邻; 让你安排座位方案,使得最多人的可以入座 ...

  8. dotnet core 通过修改文件头的方式隐藏控制台窗口

    原文:dotnet core 通过修改文件头的方式隐藏控制台窗口 在带界面的 dotnet core 程序运行的时候就会出现一个控制台窗口,本文告诉大家使用最简单方法去隐藏控制台窗口. 最近在使用 A ...

  9. Delphi 中的字符串(还解释了shortstring)good

    一.Delphi 2009 之前的字符串(不支持 Unicode): Delphi 2009 之前的字符串分为 3 种:ShortString.AnsiString.WideString. [Shor ...

  10. spring mybatis circular reference

    摘要: Error creating bean with name 'XXX': Requested bean is currently in creation: Is there an unreso ...