zoukankan      html  css  js  c++  java
  • 第一次做C++项目的一点小总结

    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++还是不够面向对象。

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

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

    14, 用最新版本的vs。

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

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

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

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

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

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

    个人需要提升的方向:

    1,多线程。

    2,通讯。

    3,数据库。

    4,其他各种基本功。

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

    最后想说,作为一个软件工程师,C++和java二者兼攻是很有必要的。许多遇到的强人也都是这样的。
    具体不解释。
  • 相关阅读:
    autocomplete自动完成搜索提示仿google提示效果
    实现子元素相对于父元素左右居中
    javascript 事件知识集锦
    让 IE9 以下的浏览器支持 Media Queries
    「2013124」Cadence ic5141 installation on CentOS 5.5 x86_64 (limited to personal use)
    「2013420」SciPy, Numerical Python, matplotlib, Enthought Canopy Express
    「2013324」ClipSync, Youdao Note, GNote
    「2013124」XDMCP Configuration for Remote Access to Linux Desktop
    「2013115」Pomodoro, Convert Multiple CD ISO to One DVD ISO HowTo.
    「2013123」CentOS 5.5 x86_64 Installation and Configuration (for Univ. Labs)
  • 原文地址:https://www.cnblogs.com/rixiang/p/9072038.html
Copyright © 2011-2022 走看看