C++代码的简单优化(一)
来源:互联网 发布:达内科技 设计网络营 编辑:程序博客网 时间:2024/06/05 07:20
当我们编写出实现功能的无差错的代码时,只能说工作只完成一半,还需要对代码进行各种整合,检查其命名、文件结构的规范性,代码执行效率等等的优化或重构,在这列举几个简单的C++代码优化的例子。
1.类中各变量的整合
eg:编写一个简单的MFC对话框程序,程序界面如下图所示:
刚刚入门学习MFC的可能将其各个控件变量定义如下:
//CPlayerConfigDlg.hpublic:CComboBox m_combol;int m_jumptime;int m_update;CHotKeyCtrl m_hotkey;但有一定编程经验的MFC编写的会这样定义:
//CPlayerConfigDlg.hstruct _ST_CONFIG{int iLanguage;// 语言WORD wHotkey;// 老板键UINT uiEnHot;// 是否使能老板键int iPS;// 点击播放、暂停int iOnlyAb;// 只列出可播放的int iAutoStop;// 自动暂停int iFitVideo;// 窗口适应视频int iStepTime;// 步进时长int iUpdate;// 升级选项}m_stConfig;将该对话框的控件变量默认定义为私有(Private),并统一放入一个结构体。这样编写,提高了类内部变量的安全性,各个区域的变量划分更明确,也方便各个模块的传递。
2.各头文件的整合。
在编写代码的过程中常常需要添加各式各样的头文件,虽然有#pragmaonce及宏定义让头文件编译一次,但依旧让文件的包含关系显得混乱。
我们可以将各系统头文件、自定义类头文件、宏定义、自定义数据类型统一放到一个头文件,然后让预编译头文件涵盖该文件。
#ifndef _CIM_DEF_H#define _CIM_DEF_H#pragma once////////////////////////////////系统头文件////////////////////////////////// 数学库#include <math.h>// 路径处理#include <shlwapi.h>// GDI+库#include <GdiPlus.h>////////////////////////////////类型、常量定义/////////////////////////// 文档操作命令enum CMD_TYPE{CMD_OPEN, // 打开CMD_SAVE,// 保存CMD_SAVE_AS,// 另存CMD_CLOSE,// 关闭CMD_UNDO,// 撤销CMD_REDO,// 恢复};// 从 RGBQUAD指针 中取出各分量#define QUADB(p) ((LPBYTE)p)#define QUADG(p) ((LPBYTE)p + 1)#define QUADR(p) ((LPBYTE)p + 2)#define QUADA(p) ((LPBYTE)p + 3)////////////////////////////////自定义头文件////////////////////////////////// 自动初始化GDI+类,由App类继承#include "CimInitGDIP.h"// 图像类#include "CimImage.h"// 缩放控制类#include "CimScale.h"// 鼠标拖拽管理#include "CimMouse.h"/////////////////////////////类型、变量定义///////////////////////////////////////////////////////////////函数定义//////////////////////////////////#endif // #ifndef _CIM_DEF_H
3.资源加载的整合
eg:编写需使用的GDI+的程序时,需加入GDI+加载和释放资源的代码,刚接触GDI+的可能会将这部分代码放置在App类的中:
BOOL CGDIPlustestApp::InitInstance(){//..............//GDI+资源的初始化Gdiplus::GdiplusStartupInput gdiplusStartupInput;Gdiplus::GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);//..........}
CGDIPlustestApp::~CGDIPlustest11App(){Gdiplus::GdiplusShutdown(gdiplusToken);//GDI+的释放}然而可以使用类继承的方法来实现GDI+资源的加载和释放,构建一个专门管理GDI+的类。
//CimInitGDIP头文件#pragma onceclass CimInitGDIP{// tokenULONG_PTR m_ulToken;public:CimInitGDIP(void);~CimInitGDIP(void);};
//CimInitGDIP源文件#include "StdAfx.h"#include "CimInitGDIP.h"// 构造时自动初始化GDI+CimInitGDIP::CimInitGDIP(void){Gdiplus::GdiplusStartupInput si;Gdiplus::GdiplusStartup( &m_ulToken, &si, NULL );}// 析构时自动释放 GDI+CimInitGDIP::~CimInitGDIP(void){Gdiplus::GdiplusShutdown( m_ulToken );}
class CTestApp: public CWinApp, public CimInitGDIP// 自动初始化GDI+{public:CCIMPApp();// 重写public:virtual BOOL InitInstance();// 实现public:DECLARE_MESSAGE_MAP()};extern CCIMPApp theApp;
0 0
- C++代码的简单优化(一)
- 几个简单的代码优化技术(一)
- protobuf的C简单的代码例子(一)
- protobuf的C简单的代码例子(一)
- C代码优化方案(一)
- 代码优化(一)
- C语言编程之代码优化(一)(转)
- C代码的优化(节选)
- jsp学习的简单代码(一)
- jsp学习的简单代码(一)
- jsp学习的简单代码(一)
- jsp学习的简单代码(一)
- springMVC简单的实现代码(一)
- 优化C代码的技巧
- c语言代码的优化
- Android代码优化(一)
- 代码优化经历(一)
- C语言的简单应用(一)
- Judging Troubles (multiset查找)
- LTE中的层映射的主要作用
- 翻译GitHub官方开始文档
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- 二进制文件加密
- C++代码的简单优化(一)
- 1.Two Sum (数组中两个数之和为n)
- javascript中的BOM操作(JS高级程序设计第八章)
- Android Fragment 真正的完全解析(上)
- Silver Cow Party poj 3268
- Android微信抢红包外挂 源代码
- My97DatePicker用法及下载
- js手机检测
- NSAttributedString的NSUnderlineStyleSingle在iOS8.1上无效的解决方法