编程技术
nand库路泽
这个作者很懒,什么都没留下…
展开
-
C语言实现面向对象之继承性
面向对象有三个最为明显的特性:继承、封装、多态性。C++、java、C#等面向对象语言在语言层次上支持OOP,而OOP本身其实并不是专门为语言设计的。虽然C语言在语言层次上不支持面向对象,但是通过C语言也是可以实现OOP的特性的。下面就主要讲述通过C语言实现面向对象的三大特性之一:继承性。“继承”是面向对象中的一个概念,如果一个类A继承自另一个类B,就把这个类A称之为类B的子类,而B类则是原创 2012-11-26 14:19:26 · 6501 阅读 · 2 评论 -
android 字符串比较
android 字符串比较原创 2015-07-28 09:40:35 · 3160 阅读 · 0 评论 -
构造函数的那些事
C++中的一个十分重要且常见的概念就是构造函数。但是里面深入的东西确实很多,而且相关的概念和知识点也比较多,今天一并整理,防止搞混淆。先说会涉及到的内容主要有:构造函数,默认构造函数,拷贝构造函数,默认拷贝构造函数,深拷贝,浅拷贝,析构函数。 1.构造函数 构造函数的作用是给对象的成员变量进行内存分配等初始化的工作。如果我们创建类的时候,我们没有手动添加构原创 2015-12-27 21:32:04 · 1792 阅读 · 2 评论 -
C++智能指针auto_ptr和nuique_ptr
在平时编码过程中,程序员操作资源这块是很频繁的一件事,一般对于堆内存等资源,我们需要手动申请和释放。但是,由于代码的频繁改动,很容易造成内存泄露,而这种内存泄露的大部分原因是因为对应的资源没有释放。例如,指针指向的一块内存,其释放操作在函数的尾部,但是中间由于其他条件,直接返回了,因此其尾部释放资源的操作无法执行。进而导致了资源泄露。而C++中的智能指针就是出于解决这类问题而诞生的。原创 2016-01-16 18:49:18 · 1839 阅读 · 0 评论 -
VC开发慎用ASSERT
在VC开发过程中,我们会经常使用系统定义的一些宏来帮助我们做调试判断,其中有我们十分常用的TRACE和ASSERT这两个宏。但是,这两个宏一定需要慎用,之前在接手别人的代码时,就因为ASSERT而导致了非常麻烦的问题。现在将ASSERT的一些注意的地方描述出来,以供参考。 ASSERT这个宏是一个断言,用法为ASSERT(条件)。只有当条件为0时,才会触发断言,因此在DEBUG模式原创 2016-01-20 21:38:51 · 5262 阅读 · 0 评论 -
xcode 中遇到“release is unavailable in automatic reference counting mode”的解决方法
在最新的xcode7.0之后的版本,创建工程的时候,已经没有了是否可以勾选自动回收释放内存的机制。导致初学者在写程序的时候,会遭遇一个问题。那就是,手动添加内存释放的时候,会报错。具体如下所示。 到网上搜寻了很多答案,由于最新的xcode有一些改动,所以对于初学者会有困扰。我现在将解决方法分享一下。 由于在创建的时候,无法取消自动释放内存的选择。导致我们需要在工程内原创 2015-12-20 13:35:33 · 4362 阅读 · 1 评论 -
字符串赋值问题--笔试题
今天面试的时候,由于不知道会有笔试,匆忙之间没有来得及准备。加上急着要回广州,答题较为匆忙。还好负责笔试的考官很有耐心,一个个知识点单独来考我,这里面很多细节的知识点,确实有遗忘。回头得复习,不过这次笔试里面有几道题还是让人印象深刻。虽然我们平时肯定不会这么用。但是,考试这么考的时候,我们未见得能够应付得来。 原题一: char* buf ="helloworld";原创 2015-12-25 00:10:19 · 1898 阅读 · 0 评论 -
C++ 中的const用法整理
const在C++中是一个十分重要的修饰符,而它的用法在不同的也有很多种,除了我们常用的,还有一些不常用的。今天一并全部整理。const 是对变量或对象起保护作用,防止变量或对象被修改。下面来讲解其中的用法。 1. 变量和const的关系 举例说明:constint a = 3; 表示变量a为const 类型常量,即a无法被修改。其中的int是变量类型的借代,但不包括指原创 2015-12-26 11:39:27 · 2362 阅读 · 0 评论 -
构造函数能否调用virtual 虚函数
之前有看到在Effective C++中提及,在构造函数里面是否可以调用虚函数。在书中是明前表示不建议我们这么干的。原因也很明确,就是在构造函数中,是无法执行到派生类中对应的函数接口的。但是,是否真的如此,我们仍然需要通过代码执行。 首先,我们需要明确的是,这里指的不能调用虚函数,是指不能调用当前构造函数所在的类的虚函数,而并不是指其他的无关的类的虚函数。看代码示例:class原创 2016-01-14 23:52:16 · 2840 阅读 · 0 评论 -
emWin界面库注意事项之自定义回调函数之后,句柄为0
由于在嵌入式设备上可供使用的界面库很少,项目当中所使用的界面库为德国SEGGER公司开发的emWin界面库。使用上和windows的GDI大致类似,也提供了丰富的API接口。如果我们需要对控件进行自绘的话,一定要进行的一个操作是通过设置回调函数,获取控件的消息循环,进行自定义处理。回调函数的命名一般为_cb函数名的方式。 通过设置了回调之后,我即可以在控件内部进行自绘了,但是如果我们想原创 2016-04-11 09:39:09 · 6137 阅读 · 1 评论 -
github上的提交数统计
之前在github上使用一直没有注意一个问题,就是我最近频繁的提交,但是github上没有显示我提交频繁程度。我明明每天都有提交,这个是什么原因? 于是我查阅了一下,github上对于贡献统计的要求,一般来说都有以下几点了: 1.fork是不能算的,你必须是你提交的这个项目中的成员 2.你提交的pull申请必须通过了才会算。 .....原创 2016-03-03 11:13:29 · 24359 阅读 · 0 评论 -
关于C++中的继承和重载的区别
C++中的很多特性光从概念上的话,很难做区分。或者说,概念让人容易模糊,比如说函数重载和函数继承。 先说重载,重载分为操作符重载和函数名重载,其中,操作符重载就是对运算操作符的原有功能进行自定义设置。比如+运算符,一般只用作对数字的相加。但是,从在运算符之后,可以实现对象的相加处理。要对运算符进行重载,一般格式为:函数类型 operator 函数名称(形参列表){};opera原创 2016-06-02 18:33:46 · 8901 阅读 · 1 评论 -
数据结构和算法之数组奇数、偶数分离
今日,博主在面试一家外企的时候,要求白板写程序。其中就有一道算法设计题目,下面就来分享一下这道题的算法思路和相关示例代码。 题目:要求将一个整形数组中的奇数和偶数进行分离,偶数在前面,奇数在后面,不对数字进行排序。 思路,其实这个是一类考察排序的题目的一种变形,排序的基本操作也是根据对应的规则对数据成员进行交换,所以呢这里的规则就是通过奇偶性进行排序。而我当时思原创 2016-06-04 16:44:11 · 10321 阅读 · 0 评论 -
C ++ extern "C"的用法
在C++的很多代码中,我们经常看到有extren "C"的代码片段,很多人并不清楚其中的含义。而且,我们在C/C++中还会经常看到一个关键字,extren。因此,这样造成了很多的用法和理解上的混淆。 我们先说一下extren关键字,这个关键字在C中就已经存在了,它是用来修饰一个变量的。例如:extren const int m_val;这是告知编译器,该变量已经在其他文件中有所定义,此处原创 2016-07-12 10:55:55 · 10337 阅读 · 0 评论 -
Linux下Clion编译Cmake报错的解决方案
前段时间,在linux下安装了一个C++ 开发的神奇,由JetBrain公司开发的IDE--CLion。之所以称CLion为神器的原因是因为,在linux下没有比这款IDE更强大的开发工具了。 所以,我迫不及待的跑到官网上下载了一个最新版本的Clion,由于我下载的版本是绿色版,不需要进行编译。直接进行解压就好了。linux下的解压命令 tar -zxvf clion.xx.xx;原创 2016-06-06 19:57:52 · 27146 阅读 · 0 评论 -
C++和Java,绝不只是语法不同这么简单
说到面向对象,我们的脑海中立马会涌现出C++,java,object-C 这几个大类的语言,甚至是C#。似乎看来,他们都是面向对象的不同实现而已(博主这句话就很C++了)。尤其对于初学者而言,很难显见他们之间的不同以及设计哲学上的差异,这种差异需要我们有过几年的编程经验,同时对几种语言都比较熟悉的时候才能够深刻的感受到。 以前有人说C++就是强化版的C++,现在应该没有人继续有这种思原创 2016-07-26 17:02:31 · 19203 阅读 · 1 评论 -
安卓调试时显示连接主机产生错误解决办法
在Eclipse原创 2014-10-19 17:11:04 · 1555 阅读 · 0 评论 -
wince下serlocaltime失效的原因
好久没有写博客原创 2014-05-04 10:59:41 · 1715 阅读 · 0 评论 -
UML之顺序图
最近学习uml 的使用,参看了几本书之后,发现uml 虽然是一个极度抽象的东西,但是其设计思想还是相当不错的。主要他可以为较为广泛的对象进行建模,而且高度抽象化的这种能力也是需要我们学习和膜拜的。顺序图是通过以时间为表示方法来表示对象为实现某些功能而发送/接收消息的过程,简单的表达的话,感觉可以用时间流程来表示它。顺序图建模要用到的建模元素:消息:两个对象之间进行通信的载体,可原创 2012-11-20 09:53:02 · 3049 阅读 · 0 评论 -
MFC生成带控件的dll以及dll的调用
之前没有做过dll方面的工程,但是由于最近需要,于是就做了这方面的工作,从一窍不通到总算做出来了,期间问过了很多位大神,大家给的方式都不同,搞得我是晕头转向。最后,总算明白了一点点其中的道理。要做dll,首先得创建一个dll工程,这里一路默认即可,例如命名为:testdll。由于我们要将dll文件和接口文件发送给别人使用,所以这个时候就要创建接口文件并且制定接口函数。最后对方只要得到这个接口文原创 2012-12-08 18:01:52 · 4238 阅读 · 3 评论 -
多块网卡的绑定获取
在程序中经常会有需要用到多块网卡的时候,而在一般的套接字编程的过程中,由于设备连入端都是一块网卡的,所以一般只需要对创建套接字,让系统自己去绑定套接字,就可以完成通信过程。但是,当设备中有多块网卡的时候,就需要对多个网卡进行绑定,进而完成通信,否则,在同一时间内只能允许一块网卡在工作。在一些嵌入式设备中,有时候需要利用多块网卡对设备通信起备份作用。绑定网卡进行通信一般可以采用两种方式。第一种是原创 2012-12-28 09:00:57 · 1337 阅读 · 0 评论 -
对32位无符号整数进行排序
题目要求:输入一个32位无符号整数,对每一个正整数十进制表示的每位数字按照降序对各位数字进行排序得到一个新数。并对调整后的该组正整数按照升序排列后输出。按照以下流程完成题目。流程:1. 输入无符号整数个数2.逐个输入相应的无符号整数(32位无符号整数)3.对输入的数据按照十进制每位的大小进行降序排列,并调整为新数据。如:243调整为4324.对调整后的数据进行升序排序原创 2012-12-28 09:07:39 · 4057 阅读 · 0 评论 -
线程的控制等待
关于线程的挂起和等待用到了几个相关的函数,分别是WaitForSingleObject和SetEvent,其中WaitForSingleObject主要用来控制进程的挂起,这个函数的作用的两个参数较为重要,其中第一个参数handle是一个句柄类型。可以接受Event、Job 、Thread 等多种类型的句柄。而这个参数也是这个函数最为重要的一个函数,这个句柄用于控制线程的启动或等待。第二个参数D原创 2013-01-23 09:44:55 · 716 阅读 · 0 评论 -
创建线程的函数使用
线程创建有几个主要的函数,CreateThread和AfxBeginThread。其中,在MFC环境下一般体检使用AfxBeginThread这个函数,原因是因为CreateThread这个函数使用并不安全。在MFC中使用AfxBrginThread偏多。在使用AfxBeginThread的过程中,有几个参数比较重要,而且AfxBeginThread有两种使用格式,在MSDN中的格式如下:原创 2013-01-23 09:46:24 · 3967 阅读 · 1 评论 -
设计模式之观察者模式
观察者模式在设计模式中应该是属于一种比较好理解的模式,而且这个模式应用也相当广泛。当然,任何一个设计模式真正理解了之后多不会很难,关键是如何在实际的工程中应用并关联上,这才是真正理解设计模式的。否则,只是一个理论知识停留在脑海的仓库里,而不能够发挥实际的作用。之前,虽然对于观察者模式也知道,但是就是属于知识记忆的类型,而不能够真正的理解。到了真正的场景中仍然是不能够联想起什么样的场景使用最合适。原创 2013-01-29 09:22:52 · 744 阅读 · 0 评论 -
生成的Dll突然变小的解决方法
在编译的时候,不知道是什么原因,导致编译的dll突然就变小了。后来用了一个Dependency Walker这个工具打开dll文件进行查看,结果如下:后来将中间文件全部删除之后,重新进行编译,发现dll又恢复正常了,我将dll打开看,结果如下:终于发现有不同的地方了,因为在ADVAPI32.dll上有不同。不过这个具体原因还不知道,后来查询资料发现,最有可能的原因是原创 2013-01-18 16:25:04 · 1617 阅读 · 0 评论 -
%d的格式控制
针对%d的格式输出,主要可以用一个公司来表示。 (1)%[-1][0]m.nd,这个用作控制整数的输出。首先是m用来控制输出项的总宽度,如果输出项的宽度小于m,则会通过空格补充,如果宽度大于m,则以实际宽度为准。 其次,n的作用是用来表示输出的最小规定有效位数,如果不足,则用0来补充,例如n=3,而实际数据为整数2,则结果为002.如果实际数据为1023,则输出也为原创 2013-05-23 15:19:36 · 5479 阅读 · 0 评论 -
文件映射的相关操作流程
当我们需要对大容量文件进行读写的时候,采用CFile类进行读写的话,操作的效率会不高。而且CFile类本身也不是针对大容量文件设计的,所以我们需要提高读写效率的话,需要进行文件映射。 文件映射是指将需要读写的内容映射到内存中去,然后由系统对内存进行操作,写入到文件中去,从而大大的提高读写的速度。不过,这个还是得要和你的存储设备本身的读写效率相挂钩!例如在SD卡上的读写效率原创 2013-07-09 10:41:20 · 2069 阅读 · 2 评论 -
关于CDC在非控件类中的使用
在非CStatic的派生类中,由于进行图形的绘制的话,我们需要对该类传入一个CDC以便于绘画。这是因为非CStatic等控件类无法自己产生onPaint这类的消息,因此需要借传入的CDC进行回执,然后回执在其他的内存上,最后达到绘图的效果。 但是,在这里面有一个问题,当我们直接传入CDC的时候,往往会造成一个访问私有成员变量的错误,如下:void CBaseDlg::原创 2013-06-27 14:24:42 · 1630 阅读 · 0 评论 -
CSTATIC 控件的刷新
CStatic控件继承而来的自定义控件,在与父窗口进行调用绘制的时候,如果我们是在Cstatic控件上需要进行一个数据的不断刷新,那么我们需要为CStatic自己内部进行控件的刷新。 同时,由于内部的刷新和onpaint函数,我们最好对于控件上的内容的绘制采用控件内部定义的DC。如果用外部窗口的Dc来传入参数对控件进行绘制,往往会出错,因为外部的DC可能无法正确拷贝到内部控件的最后绘制原创 2013-06-27 14:28:14 · 3341 阅读 · 0 评论 -
_T和_L的区别
之前在程序中频繁的出现_T和_L的问题,貌似使用下没有明显区别,所以一直没有对两者进行区分。 _T是将字符串转换为TCHAR类型,而_L是将字符串转换为WCHAR类型,两者的区别就在于TCHAR类型和WCHAR类型。 先说WCHAR类型,宽字符类型。一般的字符类型为CHAR。而_T类型是微软为了能够保证WCHAR类型和CHAR类型两者在平台上能够通用设计出来的一个类型。原创 2013-06-27 14:29:20 · 3815 阅读 · 1 评论 -
利用HDC在内存上绘图
有时候,我们需要脱离控件来进行绘图,这是因为利用控件进行绘图有一定的局限性。而且有一些是他人需要用到的类时,用控件往往需要获取当前窗口指针等等操作,这个时候并不是很便利。相比较而言,利用内存直接进行回执,将图形全部回执在内存上,对方只需要将这块内存拷贝到画布上即可。 上述所说的方法,可以通过HDC来实现,HDC是CDC的一个句柄,我们通过对一个对象传入HDC实现利用CDC原创 2013-06-27 14:49:55 · 9428 阅读 · 0 评论 -
Invalidate之后无法OnPaint
最近遇到一个问题,纠结了很久也没能找到问题所在。当时,开辟了一个线程用作刷新,但是每次执行到Flush最后的一句InvaliDate之后,始终没有进入OnPaint。后来,终于找到原因,是因为InvaliDate函数虽然提交了销毁了窗口的,提交重绘的消息,但是由于这个消息等级很低,OnPaint不能够执行。之所以导致这个问题的出现,是由于线程运行的速度太快,还来不及处理,又进行Flush,结果导致原创 2013-06-27 15:00:41 · 3576 阅读 · 3 评论 -
利用HDC在内存上绘图
有时候,我们需要脱离控件来进行绘图,这是因为利用控件进行绘图有一定的局限性。而且有一些是他人需要用到的类时,用控件往往需要获取当前窗口指针等等操作,这个时候并不是很便利。相比较而言,利用内存直接进行回执,将图形全部回执在内存上,对方只需要将这块内存拷贝到画布上即可。 上述所说的方法,可以通过HDC来实现,HDC是CDC的一个句柄,我们通过对一个对象传入HDC实现利用CDC原创 2013-06-27 15:02:03 · 2317 阅读 · 0 评论 -
Wince修改系统时间问题
当我们需要修改到系统时间的时候,需要用到下面四个函数:SetLoaclTime,GetLocalTime,SetSystemTime,GetSystemTime。这四个函数是用来修改或者设置系统时间的。 先说一下这四个函数中的一点区别,显而易见的是,其实是两对函数,其中SetLocalTime和GetLocalTime是获取和设置本地的系统时间。另外一对也是大致这个含义。但是,在使原创 2013-07-03 11:23:02 · 5095 阅读 · 0 评论 -
windows下创建镜像虚拟磁盘
关于虚拟磁盘这种技术的应用,在平时的开发过程当中并不会很常见,主要是因为现在的磁盘较大,分区较多,加上现在的IDE功能较为强大。所以运用虚拟磁盘的地方并不多。但是,在很多需要通过脚本来进行程序编译、链接的地方,由于指定固定路径会导致无法在其他PC上使用以及编译容易出错等等问题。所以,通过虚拟磁盘来完成脚本对软件的编译则是十分重要的应用。 虚拟映射磁盘值得是将本地的一个磁盘或文件夹目原创 2016-08-15 09:55:16 · 20266 阅读 · 1 评论