随笔分类 - [30]C++
-
垃圾文件的扫描、显示和清理
摘要:垃圾文件的扫描、显示和清理上一篇我们说明了程序的概述以及需求分析等,程序的初始化界面为: 界面图下面我们就是开始代码实现了,下面先开始实现功能部分,即垃圾文件的扫描、显示和清理。功能的分析与设计:垃圾清理功能主要包括文件遍历扫描、显示已扫描到的文件以及垃圾文件的删除清理等。用户需要一边进行文件扫描,另一边可以对已经扫描到的垃圾文件进行清理操作。文件扫描通常会占用大量的时间,为了提高垃圾清理的可靠性和效率,应该使用多线程开发技术,即将文件扫描的任务放置在一个单独的线程中即可(1)创建一个基于对话框的工程,工程名称为“ClearTmpFi... 阅读全文
-
内存管理
摘要:内存管理开篇导读 “养成良好的编程习惯”其实是相当综合的一个命题,可以从多个角度、维度和层次进行论述和评判。如代码的风格、效率和可读性;模块设计的灵活性、可扩展性和耦合度等等。要试图把所有方面都阐述清楚必须花很多的精力,而且也不一定能阐述得全面。因此,本系列文章以软件开发的基础问题为切入点,阐述程序设计和代码编写方面的细节问题,以点带面,旨在激发大家的思考与总结,希望能为大家带来实际的帮助。 虽然本系列文章定位为科普读物,但本座相信它们不但适合新手们学习借鉴,同时也能引发老鸟们的反思与共鸣。欢迎大家提出宝贵的意见和反馈 ^_^ 在开篇讲述本章主要内容之前,本座首先用小小篇幅论... 阅读全文
-
如何在Visual Studio 2010中建用CppUTest的TDD的Code Kata的环境
摘要:如何在Visual Studio 2010中建用CppUTest的TDD的Code Kata的环境CppUTest 是一个功能全面的测试框架,是为了支持在多种操作系统上开发嵌入式软件而特别设计的。CppUTest的宏被设计成不需要了解C++也可以写测试用例。这使得C程序员更容易用这个测试框架。那么如何在Visual Studio 2010中从头建一个使用CppUTest的TDD的Code Kata的环境?下面将一步一步的教大家。为了方便测试,我的主体思路是production的project只有一个main函数,所有的functions都放在Library中,main函数直接调用Library 阅读全文
-
学习 C++的用途
摘要:学习 C++的用途,(前辈总结)C++准确说是一门中级语言,介于汇编和高级语言之间吧,要求程序员了解计算机的内部数据存储。个人认为,作为学生还是花功夫学C++,因为《设计模式》《数据结构》这些课程基本上还是C++应付的比较好(我的切身体会),学习 C++,认真阅读c++ primer,而后配合 The ADAPTIVE Communication Environment (ACE)了解设计模式, 再看看《深入浅出STL》,就会发现其他语言都一样,不变的是思想本身。在以下领域,C++有着根本性的优势:低级系统程序设计、高级系统程序设计、嵌入式程序设计、数值科学计算、通用程序设计以及混合系统设计等 阅读全文
-
用opencv将图片变成水波纹效果
摘要:用opencv将图片变成水波纹效果又是很久很久没有写博客了。不知道为什么,还是没有这个习惯。总是感觉没什么好写的。倘若是,将学到的东西,记录下来。如果是仅仅是这样的话,我自知大多没有自己的思考,也不过是将别人的东西搬到自己的博客里面而已,网上一搜一大片,又是何苦呢。 还是上学期,有个练习题目是,将一幅图片变成水波纹效果。我在网上找到一份源码,参考之下,顺着思路用opencv2重写之。望原作者看到勿怪。 思路如下: 1.将图片中的坐标点(x,y)换成极坐标,有现成的函数。 2.极坐标下,用三角函数算出新半径。 3.在新半径之下,转换成新的坐标(x0,y0),如果新坐标是小数,用双线性插... 阅读全文
-
利用emacs调试C++程序教程
摘要:利用emacs调试C++程序教程俗话说,Emacs是神的编辑器,而Vim是编辑器之神。高手程序员都是用这两样神器进行开发。本人觉得,Emacs之所以厉害,是因为许多在其他编辑器下必须用鼠标点选很多步的操作,在Emacs下都可以通过键盘来完成。大大地节省了你在显示器上找按钮的时间。Emacs在Linux上运行感觉比windows流畅些,用Emacs编辑程序时,手基本不用离开键盘,就可以完成所有的工作。那么今天就让我们看看如何利用Emacs来调试C++程序。一、安装Emacs和GCC下载地址:Emacs:http://www.gnu.org/software/emacs/ GCC:http://g 阅读全文
-
《Effective C++》简明笔记-上
摘要:《Effective C++》简明笔记-上在学习算法导论的过程中,我深深地震撼于自己笔下C++代码的丑陋。于是我决定捧起这本《Effective C++》。本来打算看完这本书,写一篇完整的笔记博文,但是刚刚看到一半,我已经跃跃欲试地想动手改善我的代码了。所以,我将写完的这部分笔记整理成单独的一篇博文。1. 视C++为一个语言联盟。C++包括C&OO C++&Template C++&STL2. 使用 const,enum,inline 代替#define。3. 尽可能使用 constconst 修饰指针的不同含义char* const p1 = "hello& 阅读全文
-
微软开源 C++ REST SDK
摘要:微软开源 C++ REST SDK投递人itwriter发布于 2013-02-28 16:31评论(0)有111人阅读原文链接[收藏]«» 微软近日开源了C++ REST SDK,托管在自己的 CodePlex 平台上。 项目地址:http://casablanca.codeplex.com C++ REST SDK 包含在Casablanca 项目中。Casablanca 是一个 C++ 本地库,旨在帮助开发者的 C++ 应用程序访问云服务。如果你想编写一个响应式的 C++ 客户端应用程序,或者是一个可扩展的服务端解决方案,可以试试 Casablanca。除了C++ R 阅读全文
-
关于内存对齐的面试题
摘要:关于内存对齐的面试题郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定!请说出如下2种方式,哪种更好,为什么?方式一:void foo(int a, float b, char* ch, double d, float f);方式二:struct A{ int a; float b; char ch[5]; double d; float f;};void foo(A* pa);咋一看,不知道这题想要考什么,无从下手。其实该题是检查考生对于内存对齐的理解。下面我们先看看关于内存的一些知识。什么是字节... 阅读全文
-
探秘C++机制的实现
摘要:我曾经自学过C++,现在回想起来,当时是什么都不懂。说不上能使用C++,倒是被C++牵着鼻子走了。高中搞NOIP并不允许使用STL库,比赛中C++面向对象的机制基本没有什么用武之地,所以高中搞NOIP名为用C++,其实就是c加上了cout和cin。 前几天看韩老师的《老码识途》,里面记录了一些C++面向对象机制的探索,又勾起了我的兴趣。而这个学期自学了汇编,又给了我自己动手探索提供了能力基础,自己上手以后,从一个更加底层的视角看C++机制的实现,让我在黑暗中摸到了驯服C++的缰绳。引用:本质上是指针,这一点即使大家没有看反汇编应该也是猜到了。对象在内存上的布局: 1: class Fat... 阅读全文
-
C++ Primer(第5版)
摘要:最近公司效益不好,没什么项目,只能翻翻旧代码,看看资料,百无聊赖的时候,弄了一本《C++ Primer》(第5版)复习一下,同时顺便练习一下久违的英语翻译。由于我并不是英语专业出身的,而且也只是闲暇时草草地翻译,所以难免出现差错,欢迎提出批评指正。(*^__^*)1.2. A First Look at Input/Output1.2.初窥Input/OutputThe C++ language does not define any statements to do input or output (IO). Instead, C++ includes an extensive standa 阅读全文
-
C++中事件机制的简洁实现
摘要:事件模型是被广泛使用的好东西,但是C++标准库里没有现成的,其他实现又复杂或者不优雅,比如需要使用宏。现在VC11可以用在XP下了,那么就痛快的拿起C++11提供的先进设施组合出一个轻便的实现吧。 为了达到简洁的目的,需要放弃一些特性: 1、不支持判断函数是否已经绑定过(因为std::function不提供比较方法,自己实现function的话代码又变多了) 2、需要使用者接收返回的回调函数标识来移除事件绑定(原因同上) 3、事件没有返回值,不支持回调函数优先级、条件回调等事件高级特性(比如返回所有处理结果中的最大最小值;只回调与指定参数匹配的事件处理函数) 4、事件参数理论上无限,... 阅读全文
-
在C++中实现事件(委托)
摘要:在C++中实现回调机制的几种方式一文中,我们提到了实现回调的三种方式(C风格的回调函数, Sink方式和Delegate方式)。在面向对象开发中,delegate的方式是最灵活和方便的,因此很早就有人用复杂的模板去模拟, 实现起来很复杂。但是现在借助C++11的function和bind, 我们可以很方便的去实现。下面是我自己的一种实现方式: 1#pragmaonce23#include<functional>4#include<algorithm>5#include<vector>6#include<assert.h>78namespaceCo 阅读全文
-
C++的坑真的多吗?
摘要:【搞笑】C++的坑真的多吗?先说明一下,我不希望本文变成语言争论贴。希望下面的文章能让我们客观理性地了解C++这个语言。(另,我觉得技术争论不要停留在非黑即白的二元价值观上,这样争论无非就是比谁的嗓门大,比哪一方的观点强,毫无价值。我们应该多看看技术是怎么演进的,怎么取舍的。)事由周五的时候,我在我的微博上发了一个贴说了一下一个网友给我发来的C++程序的规范和内存管理写的不是很好(后来我删除了,因为当事人要求),我并非批判,只是想说明其实程序员是需要一些“疫苗”的,并以此想开一个“程序员疫苗的网站”,结果,@简悦云风同学直接回复到:“不要用 C++ 直接用 C , 就没那么多坑了。”就把这个事 阅读全文
-
浏览器插件之ActiveX开发(五)
摘要:前面四篇文章都是在描述如何用C++开发基于MFC的ActiveX插件以及如果对插件进行打包和在Web页面中调用,但确忽略了一个非常重要的问题:代码签名。《浏览器插件之ActiveX开发(三)》提及了两种注册插件的方法,其中IE自动下载并注册插件的方法就涉及到签名问题,如果cab包是未签名的或签名不被信任的,IE就拒绝注册该插件。一、数字签名简述 现在的各种软件星罗密布、鱼龙混杂,用户在使用软件程序时一定要十分谨慎,稍不留意,就被病毒或恶意程序侵害。代码数字签名的出现就在一定程度上解决了这个问题。那么经过数字签名的软件有什么好处?软件一旦经过数字签名,至少可以保证以下两点: 1)该软件确实是由数 阅读全文
-
为什么多线程读写 shared_ptr 要加锁?
摘要:陈硕(giantchen_AT_gmail_DOT_com)2012-01-28我在《Linux 多线程服务端编程:使用 muduo C++ 网络库》第 1.9 节“再论 shared_ptr 的线程安全”中写道:(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化。根据文档(http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shared_ptr 的线程安全级别和内建类型、标准库容器、std::s 阅读全文
-
Hook钩子程序(续)
摘要:上一篇写到钩子程序,虽然本机调试成功了,但是,发给同学玩下,结果钩子无法加载。无奈没有网络,不停的看vs里面的帮助,Win API那部分居然是全英文的。。。看的好幸苦,也差不多知道是什么意思。但是,却还是不理解,为什么本机用Intptr.Zero是可以的。想起有个函数GetLastError可以查看错误代号。然后,在程序中引入:[DllImport("Kernel32.dll",SetLastError=true)] public static extern Int32 GetLastError();之后,改写StartHook代码如下:public bool StartH 阅读全文
-
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器
摘要:摘要:在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特点,关于python之后会写相关的文章,python对于我而言更喜欢用来编写工具,我前边一些相关的算法也是用python来实现的。今天主要讲Lua相关的开发技术。Lua具有如下特点:Lua 拥有虚拟机的概念,而其全部用标准C实现,不依赖任何库即可编译安装,更令人欣喜的是,整个Lua 的实现代码并不算多,可以直接继承到项目中,并且对项目的编译时间几乎没有什么影响Lua的虚拟机是线程安全的,这里讲的线程安全级 阅读全文
-
Hook钩子程序
摘要:好久没写了,经历了考试周,现在又解放了。这2天有事,还是没有写,今晚简单整理下,写了个钩子程序玩玩~记得最早是人人某主页君写的一个钩子程序,作为愚人节礼物发到主页上的。当时觉得好神奇啊~最近在看1200例的书,第二卷一开始就说到了钩子程序,所以迫不及待的敲一遍,改一下,完成了基本功能~屏蔽所有的鼠标左键~哈哈~捉弄人的这是。。。。。。******************************************分割线***************************************在钩子程序中,需要用到几个windows api函数。 //声明钩子函数 [... 阅读全文
-
浏览器插件之ActiveX开发(四)
摘要:简单总结一下前几篇文章的内容,《浏览器插件之ActiveX开发(一)》简单介绍了一下如何在Vs.net 2008下用C++开发基于MFC的ActiveX插件,《浏览器插件之ActiveX开发(二)》介绍了开发插件时可能遇到的问题,《浏览器插件之ActiveX开发(三)》介绍了如何注册插件以及如何打包成cab文件。但是,到目前为止还没有专门提及如何在Web页面中调用插件,本文主要针对这个问题进行展开。一、用<Object>标签调用ActiveX 1、Object标签基本用法 在Html页面中调用ActiveX插件最简单常用的方法是:<object id="CardAc 阅读全文