C++高级开发系列
文章平均质量分 86
望京最帅程序猿
在移动端开发方面有丰富的经验,擅长IOS,H5,React-Native等技术开发,Java后端开发也有涉猎。曾开发漫画岛,会计家园,畅捷服务,易代账,施工现场,项目BI,数字项目平台等App。曾经服务过App梦工厂,用友-畅捷通,目前就职于广联达。乐于分享,爱好开源,对技术有着强烈的追求。
展开
-
C++、Objective-C 混合编程
在XCODE中想使用C++代码,你需要把文件的扩展名从.m改成.mm,这样才会启动g++编译器。我们来看个测试代码:[java] view plaincopyclass TestC { private: NSString *str_;//C++类可以使用OC对象作为成员变量 public:原创 2014-04-26 01:42:13 · 1704 阅读 · 0 评论 -
C++小知识之指针和引用的区别
温故而知新,指针和引用的概念,大学时都已熟知,实际用的时候往往又有些疑惑,故深入探究一下。从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自原创 2014-01-08 17:24:23 · 9975 阅读 · 5 评论 -
C++小知识之Vector排序
// sort algorithm example#include // std::cout#include // std::sort#include // std::vector bool myfunction (int i,int j){ return (i<j);原创 2014-01-07 09:57:15 · 8652 阅读 · 0 评论 -
C++中struct和class的区别
一、 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 最本质的一个区别就是默认的访问控制,体现在两个方原创 2013-12-05 16:39:59 · 34967 阅读 · 4 评论 -
C++虚函数与虚析构函数
在C++面试一般会有一两道这样题,如果你不理解原理,那你肯定会死在这道题上,因为他真的需要理解,需要脑筋转几个弯。在类中,有两个与众不同的成员函数,那就是构造函数和析构函数。当构造函数与析构函数遭遇继承和多态,它们的运行状况又会出现什么变化呢?多态性是在父类或各子类中执行最合适成员函数。一般来说,只会选择父类或子类中的某一个成员函数来执行。这可给析构函数带来了麻烦!如果有的资源原创 2013-12-05 17:37:22 · 1348 阅读 · 0 评论 -
C++ 继承及实现
C++继承可以是单一继承或多重继承,每一个继承连接可以是public,protected,private也可以是virtual或non-virtual。然后是各个成员函数选项可以是virtual或non-virtual或pure virtual。本文仅仅作出一些关键点的验证。private(私有)和protected(保护)都能实现类的封装性。private能够对外部和子类保密,即除了成员原创 2013-12-05 17:11:18 · 3804 阅读 · 1 评论 -
C++ STL,ATL,WTL之间的联系和区别
STL即 Standard Template Library (标准模板库)STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、原创 2013-12-05 16:09:55 · 18514 阅读 · 2 评论 -
C++多线程编程之七
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301例程7 MultiThread7 该例程演示了如何使用自定义消息进行线程间通信。首先,主线程向CCalculateThread线程发送消息WM_CALCULATE,CCalculateThread线程收到消息后进行计算,再向主线程发送WM_DISPLAY消息原创 2013-12-10 17:14:50 · 1409 阅读 · 0 评论 -
C++多线程编程之四
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301例程4 MultiThread4该例程测试在Windows下最多可创建线程的数目。 建立一个基于对话框的工程MultiThread4,在对话框IDD_MULTITHREAD4_DIALOG中加入一个按钮IDC_TEST和一个编辑框IDC_COUNT,原创 2013-12-10 17:11:34 · 1207 阅读 · 0 评论 -
C++多线程编程之三
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301例程3 MultiThread3 传送一个结构体给一个线程函数也是可能的,可以通过传送一个指向结构体的指针参数来完成。先定义一个结构体: typedef struct{ int firstArgu, lon原创 2013-12-10 17:10:18 · 1590 阅读 · 0 评论 -
C++多线程编程之一
一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() {原创 2013-12-10 17:03:33 · 2803 阅读 · 1 评论 -
C++多线程编程之九
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301下面给出一个简单实例来说明 CSemaphore 类的用法。例程10 MultiThread10建立一个基于对话框的工程MultiThread10,在对话框IDD_MULTITHREAD10_DIALOG中加入一个按钮和三个编辑框控件,按钮的ID为IDC原创 2013-12-10 17:17:34 · 1050 阅读 · 0 评论 -
C++多线程编程之五
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印原创 2013-12-10 17:12:39 · 1959 阅读 · 1 评论 -
C++多线程编程之二
例程2 MultiThread2 该线程演示了如何传送一个一个整型的参数到一个线程中,以及如何等待一个线程完成处理。建立一个基于对话框的工程MultiThread2,在对话框IDD_MULTITHREAD2_DIALOG中加入一个编辑框和一个按钮,ID分别是IDC_COUNT,IDC_START ,按钮控件的标题为“开始”; 在MultiThread2Dlg.原创 2013-12-10 17:07:36 · 1388 阅读 · 0 评论 -
C++多线程编程之八
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而原创 2013-12-10 17:16:08 · 1308 阅读 · 0 评论 -
C++多线程编程之六
代码及教程下载地址 http://download.csdn.net/detail/xdrt81y/6692301你可以创建一个没有界面而有消息循环的线程,例如:你可以从CWinThread派生一个新类,在InitInstance函数中完成某项任务并返回FALSE,这表示仅执行InitInstance函数中的任务而不执行消息循环,你可以通过这种方法,完成一个工作者线程的功能。原创 2013-12-10 17:13:51 · 1118 阅读 · 0 评论 -
关于C++的内存管理
[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支原创 2013-11-28 10:14:51 · 2257 阅读 · 0 评论 -
用VC实现汉字转拼音首字母
参考代码:http://blog.csdn.net/lixiaosan/archive/2006/05/26/756350.aspxlixiaosan的代码用的是CString在Unicode下有问题,我这里稍作修改,用stl::string和stl::wstring替换CString代码为两个文件:GenFirstPYLetter.h,GenFirstPYLetter.cpp转载 2014-01-15 15:59:44 · 3810 阅读 · 1 评论 -
C++文件(夹)选择对话框
由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有。今遇到这个情况已经解决,特写下这篇博文。1.打开文件对话框常用的方法是使用系统的CFileDialog。这里介绍另外一种方法就是使用OPENFILENAME这个结构体和GetOpenFileName()这个函数,可以实现单选文件或者多选文件,代码如下:需引入头文件#include "CommDlg.h"原创 2013-11-06 12:05:10 · 31747 阅读 · 6 评论 -
使用VS 2013的Bing Code Search插件写SharePoint代码
微软推出了VS2013的扩展:Bing Code Search,可以在VS2013中直接搜索代码片段,这些代码来自与相关的代码库中的示例,包括MSDN,StackOverflow等等。这个插件省掉了在浏览器中搜索代码的时间,提高了编程的效率。我在VS2013中试了一下,真的挺好用的。下面简单说一下: 在VS 2013的Tools->Extensions and Updates中搜转载 2014-02-20 11:36:46 · 2874 阅读 · 0 评论 -
C++多态和虚函数
介绍一个RPG游戏的时候,我们就说到不同职业的玩家在发动普通攻击和特殊攻击时,有着不同的效果。在编写程序的时候,我们并不知道用户会选择哪种职业的玩家,那么又该如何保证各种攻击效果和用户选择的玩家是对应的呢?在使用继承的时候,子类必然是在父类的基础上有所改变。如果两者完全相同,这样的继承就失去了意义。同时,不同子类之间具体实现也是有所区别的,否则就出现了一个多余的类。不同的类的同名成员函数有原创 2013-12-05 17:40:38 · 1640 阅读 · 0 评论 -
C/C++中const关键字
今天在做一个趋势笔试题的时候,才让我有了系统把const关键字好好总结一下的冲动,因为这个关键词大大小小好多地方都出现过,出现频率非常高,而每次只是简短的把答案看了一下,没有真正将其整个用法弄透,马上要找工作了,为避免悲剧再次发生,不得不引起我的重视,这才有了这篇博文。 首先,一看到const关键字,我们的第一反应就是定义常量。的确,这没有错,const就是constant的缩写嘛,原创 2014-04-22 23:40:16 · 5381 阅读 · 0 评论 -
C++界面库大全2013
刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自己写的界面库,开始对于C++软件界面美化有了一点点的心得。不敢藏私,希望和一些新手朋友们分享交流。 一. 开源C++界面库 1.RingSdk转载 2013-12-16 14:42:14 · 10696 阅读 · 1 评论 -
DuiLib开发之显示Gif
最近正在用duilib进行开发,需要显示动态的gif.由于新版的stb_image.c中,还没有支持动态gif的加载,本人决定在stb_image.c中增加一个加载动态gif的函数TGifInfo*gif_load_from_memory().下面说说关键的地方吧.可以把动态gif简单的理解为:gif文件是由多张普通的bmp图片组成,显示第1张BMP,延时一段时间,显示第二张,延时一段时间原创 2013-11-06 13:17:56 · 11150 阅读 · 13 评论 -
DuiLib帮助文档篇之四通知事件
CTabLayoutUI tabselect 调用SelectItem选择了某一项时通知。CActiveXUI showactivex 创建完成后,显示时通知。CCombUI itemselect 调用Sele原创 2013-09-25 13:16:58 · 3560 阅读 · 0 评论 -
duilib进阶教程 -- 改进List控件 (1)
Duilib确实很强大,而且源码开放,有些不满足的需求,可以通过阅读源码,Debug跟代码,来改进,废话不过说,开看看要改那些东西。前情提要:Duilib源码中的ListDemo,给我们提供了一个可以左右拖拉headerItem,下面的listitem也跟着变化。但实际工作中,往往HeaderItem和listitem都比较复杂,不可能只是一个text。这就要求他是个容器,可以放option,原创 2013-12-26 19:12:35 · 17270 阅读 · 5 评论 -
DuiLib帮助文档篇之三XML配置项
DUILibxml配置项根节点 子类 属性 类型Window |--------Image 图片信息| o------name string| o------restype string| o------mask unsigned long#||--------Font 字体信息| o------name string| o------size long原创 2013-09-25 13:13:56 · 7402 阅读 · 0 评论 -
duilib进阶教程 -- 实现List排序
需求: 点击List的某个ListHeaderItem,List按照此列排序。实现思路:在C#中好多控件都支持排序,如gridview,只要配置相应属性并实现一些方法就可以了,但duilib就不行了,一切都得自己来。1 找到事件触发位置,在Notify方法中捕获DUI_MSGTYPE_HEADERCLICK这个消息,在比对控件名即可2 排序处理 1)获取每一个ListItem,放入一原创 2014-01-07 16:20:15 · 11032 阅读 · 13 评论 -
duilib进阶教程 -- 改进List控件_优化支持多选拉伸 (2)
上篇博客写完,以为改进List达到了项目要求,可后来发现诱发了其他的问题,如滚动条部分功能失效,还有程序在运行一段时间后进入了无响应状态。后来在以下三个方向进行了探索:1 主要改进还是在DrawItemText 函数中,试图解决由此引起的Bug结果:不能解决掉,但证明duilib是可以实现的,只是思路和方法还没有找对。 DrawItemText 本来的作用是重绘Text...原创 2014-01-03 15:30:25 · 9964 阅读 · 58 评论 -
bolt界面引擎学习笔记一
今天初步了解了迅雷的bolt界面引擎。下载的是最新版本:1.5.0.468bolt界面引擎主页:http://bolt.xunlei.com/#sdk中包含boltsdk_2008,有Demo文件夹sample,我的环境是vs2010,直接升级工程只有HelloBolt可以编译运行,其他的都需要配置项目属性和安装wtl8.0.其他工程配置步骤:1 安装和配置原创 2013-12-13 18:04:32 · 10071 阅读 · 0 评论 -
DUILIB异形窗口实现
异形窗口的实现基本思路是:1.将窗口扩展属性设置为分层属性WS_EX_LAYERED。2.选一张透明的png图片,并将其加载进来。3.创建与窗口兼容的内存设备上下文,以及兼容位图,将兼容位图选入兼容设备上下文。4.将png图片绘制到内存设备上下文中。5.设置BLENDFUNCTION结构,调用UpdateLayeredWindow。原创 2014-03-25 15:14:22 · 11770 阅读 · 2 评论 -
duilib进阶教程 -- 改进List控件(3)_支持多选+右键菜单(ctrl,shift, 鼠标滑动框选)
看到很多PC客户端的列表都支持多选,比如PP助手,华为网盘,duilib本身UIList却没有此功能的支持,于是想修改一把,完善这方面的劣势,而且相信用到的这个功能的也不少,尤其在开发文件管理相关的功能模块,多选的支持应该是必须的。原创 2014-02-28 18:06:08 · 13987 阅读 · 53 评论 -
DuiLib帮助文档篇之一UIManager
DUiLib 源码分析 ——以UiLib 1.01版为分析目标----------------------------------------------------------------------------------分析约定:private o------- 私有的成员变量或方法protect x------- 受保护的成员变量或方法public +------- 公原创 2013-09-25 13:10:00 · 3644 阅读 · 0 评论 -
DuiLib帮助文档篇之二UIBase
----------------------------------------------------------------------------------分析约定:private o------- 私有的成员变量或方法protect x------- 受保护的成员变量或方法public +------- 公开的成员变量或方法----------------------原创 2013-09-25 13:12:05 · 3118 阅读 · 0 评论 -
C++开发之界面库资源推荐篇
开发C++的界面,如果用MFC显得过于传统和呆板,如果是企业应用无所谓,要求没那么高,如果是互联网应用,就显得太单调了,不能容易的写出漂亮的界面,吸引眼球,像QQ,360这种客户端界面怎么开发出来的呢。用下面的介绍的几款国内开源的界面库,就会很容易。一、DuiLib界面库下载地址:http://code.google.com/p/duilib/论坛地址:http://www.bbsdu原创 2013-09-27 10:05:22 · 19349 阅读 · 0 评论 -
Windows GDI绘图-实践篇一
一、基础 GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。记得调用了BeginPaint后要调用EndPaint进行清理,调用GetWindowDC和GetDC后要调ReleaseDC进行清理。在MFC代码中常常遇到的CDC CPain原创 2014-02-20 12:00:19 · 4297 阅读 · 0 评论 -
C++多线程之使用Mutex和Critical_Section
Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量、对象或内存空间的访问。下面是其主要的异同点(不同的地方用绿色表示)。 MutexCritical Section性能和速度慢。Mutex 是内核对象,相关函数的执行 (WaitForSingleObject,原创 2013-11-28 13:54:19 · 22538 阅读 · 1 评论 -
c++ vector 释放内存
1.释放单个指针关于Vector中存放指针的问题,在进行清空的时候比较安全的一种做法是: std::vector ClassNameVec; ...push_back(new ClassName()); std::vector::iterator ClassNameIt = ClassNameVec.begin(); for(;ClassNameIt原创 2013-11-28 10:12:27 · 2073 阅读 · 0 评论 -
【C++】vector与构造、析构函数的一点小发现
今天偶然要用到vector存储一个自定义的类,但用起来心里有点发虚,构造和析构到底什么时候调用的,于是写了一点代码测试一下,发现了点有意思的东西,分享下(本文所有代码在dev c++ 4.9.9.2下运行):Version1: 这段代码很简单,构造了一个A的对象,把这个对象放到vector里边,输出也应该很容易猜到,就是构造函数,拷贝转载 2013-11-28 10:11:27 · 4688 阅读 · 0 评论 -
C++解析JSON之JsonCPP
一、JSON简介JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。JSON由两种基本结构构成:1)"名称/值"对的集合,可以理解为对象。2)值的组合,可以理解为数组。JSON对象简单示例示例1:{ "header": { "pid": "10"原创 2013-09-30 16:38:06 · 28799 阅读 · 0 评论