本人原本一菜鸟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. arm-linux内存管理学习笔记(1)-内存页表的硬件原理

    linux kernel集中了世界顶尖程序猿们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络.从事嵌入式软件开发工作,对设备驱动和网络接触的比較多. 而进程调 ...

  2. html5--1.12表格详解

    html5--1.12表格详解 一.总结 一句话总结: 二.详解 1.表格构成三个基本要素 table:表格的范围,外框:用来定义表格,表格的其他元素包含在table标签里面: tr: 表格的行: t ...

  3. erlang tcp发包速度测试

    http://blog.sina.com.cn/s/blog_96b8a1540101317m.html 这段时间我们的项目遇到广播包的一些性能问题,想起之前看到yufeng老大提到的1s广播40K包 ...

  4. Java设计模式菜鸟系列(二十二)中介者模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与 ...

  5. 菜鸟学习Spring——60s利用JoinPoint获取參数的值和方法名称

    一.概述 AOP的实现方法在上两篇博客中已经用了两种方法来实现如今的问题来了尽管我们利用AOP,那么client怎样信息传递?利用JoinPoint接口来实现client给详细实现类的传递參数. 二. ...

  6. 查询系统状态 内存大小 cpu信息 设备负载情况

    1.1 查看内存状态 /proc/meminfo里面存放着内存的信息 查看内存命令(包括虚拟内存swap): free -h (低版本系统可能不支持-h) 或者 free -m (以mb单位显示) a ...

  7. Word 2010/2013 菜单栏添加 MathType 菜单

    一般对于 office 的高级版本,比如 word 2010/2013,在手动安装 mathtype 之后,并不会再 word 的菜单栏,创建 mathtype 按钮,此时需要按照如下步骤,手动导入 ...

  8. navigator 页面链接

    页面链接. 属性名 类型 默认值 说明 url String   应用内的跳转链接 redirect Boolean false 是否关闭当前页面 hover-class String navigat ...

  9. Dojo第一节:学会使用firebug对js,Dojo进行调适

    内容概要: 学会使用firebug的基本功能 1. 简介:Firebug是Firefox的一个插件,用来对js代码进行调适的工具. (官方废话:Firebug是firefox下的一个插件,可以调试全部 ...

  10. 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good

    本节讲解SpringBoot与Spring-data-elasticsearch整合的入门案例. 一.环境搭建 新建maven项目,名字随意 pom.xml <parent> <gr ...