2020-12-16备注:几年前写的玩意,写的不咋地,不值得参考。
本人原本一菜鸟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的bs结构的项目思路有些差别,前者很多情况下简易、轻巧为妙,数据库适合选用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++还是不够面向对象。
13,有些地方,不写注释就担心别人看不懂,一般就意味着 这段代码写得很狗屎。
14, 用最新版本的vs。
不做这些工作,那就是用户体验不好。
16,做工具性质的管理软件,最重要的不是界面漂亮,而是清晰、整洁、规整、合理、易懂。
17,要考虑不同电脑上 屏幕分辨率不同 对界面的影响。
如果只是单纯的windows程序,不同分辨率界面会错乱。
如果是用界面库,则一定要用合适的界面布局。
个人需要提升的方向:
1,多线程。
2,通讯。
3,数据库。
4,其他各种基本功。
最重要的一是基本功,二是经验。