文章分类 -  C&C++

摘要:一、引入原因: 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。二、纯虚函数实质: 类中含有纯虚函数则它的VTABLE表不完全,有一个空位,所以,不能生成对象(编译器绝对不允许有调用一个 阅读全文
posted @ 2013-09-26 12:07 Jack Tung 阅读(391) 评论(0) 推荐(0)
摘要:封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性,并且它是软件设计复用的本质,虚函数的出现为多态性质提供了实现手段。如果说C语言的struct相当于对数据成员简单的排列(可能有对齐问题),那么C++的class让对象的数据的封装变得更加复杂。所有的这些问题来源于C++的一个关键字——virtual 阅读全文
posted @ 2013-09-26 10:10 Jack Tung 阅读(93) 评论(0) 推荐(0)
摘要:typedef作为类型定义关键字,用于在原有数据类型(包括基本类型、构造类型和指针等)的基础上,由用户自定义新的类型名称。在编程中使用typedef的好处,除了为变量取一个简单易记且意义明确的新名称之外,还可以简化一些比较复杂的类型声明。比如:typedef int INT32;将INT32定义为与int具有相同意义的名字,这样类型INT32就可用于类型声明和类型转换了,它和类型int完全相同。比如:INT32a;//定义整型变量a(INT32)b;//将其它的类型b转换为整型既然已经有了int这个名称,为什么还要再取一个名称呢?主要是为了提高程序的可移植性。比如,某种微处理器的int为16位 阅读全文
posted @ 2013-09-22 21:46 Jack Tung 阅读(78) 评论(0) 推荐(1)
摘要:本文参考 :http://blog.sina.com.cn/s/blog_5e8facd20100qn20.html整理1.指针函数的定义 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。其一般定义形式如下: 类型名*函数名(函数参数列表); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表... 阅读全文
posted @ 2013-09-22 21:36 Jack Tung 阅读(204) 评论(0) 推荐(1)
摘要:作者:阮一峰 原文链接字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP算法解释。1.首先,字符串"BBC 阅读全文
posted @ 2013-08-30 23:11 Jack Tung 阅读(86) 评论(0) 推荐(0)
摘要:字符串匹配的Boyer-Moore算法作者:阮一峰发布时间: 2013-08-28 17:22阅读: 792 次推荐: 6原文链接[收藏] 上一篇文章,我介绍了KMP算法。 但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。 下面,我根据Moore教授自己的例子来解释这种算法。 1. 假定字符串为"HERE IS 阅读全文
posted @ 2013-08-30 23:05 Jack Tung 阅读(86) 评论(0) 推荐(0)
摘要:不让别人看代码有三种方式1.把编译出来的.obj给他去链接2.把.obj做成静态库lib文件3.编译成 .dll 动态链接库文件---------------------------------------------------------------------------------------方案一 结果是只能给做VC++开发的调用方案二 可以给做VC++或BCB开发的调用方案三 可以给任何支持调用动态库的开发工具调用 如VB,Delphi-------------------------------------------------------------------------- 阅读全文
posted @ 2013-08-21 18:47 Jack Tung 阅读(720) 评论(0) 推荐(0)
摘要:本文实例是在vs2005中调用dll。一、静态调用方法:(1)在工程属性设置中加入该库的静态库(.lib);(2)将该库的头文件(.h)加入到工程中;(3)将动态库(.dll)放到工程中相应目录下;前两步骤是为了标明动态库的入口函数,以使其他函数可以正确的调用动态库。调用时,只需要包含.h头文件就可以使用库中的函数了。二、动态调用方法:动态调用法要用Windows API中的LoadLibrary()和GetProcAddress()来调入dll库,指出库中函数位置。该方法不需要.lib库和.h文件。下面以一个实例来说明该方法。#include "stdafx.h"#inc 阅读全文
posted @ 2013-08-21 18:46 Jack Tung 阅读(194) 评论(0) 推荐(0)
摘要:1、先在VC下新建一个Win32 Dynamic-Link Library工程,默认为一个空白工程;2、将要封装的“.h”和对应“.cpp”文件拷贝到DDL工程目录下并加载到工程中;3、在“.h”文件中加入如下代码:#ifdefDLL_EXPORTS#defineDLL_EXPORTextern"C"__declspec(dllexport)#else#define DLL_EXPORTextern "C" __declspec( dllimport )#endif4、在“.cpp”文件中对要导出的函数名前加上“DLL_EXPORT”这个宏;5、将这些设 阅读全文
posted @ 2013-08-21 18:35 Jack Tung 阅读(177) 评论(0) 推荐(0)
摘要:所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 、<iostream>和<iostream.h>和格式不一样 前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因 此,当使用<iostream.h>时,相当 阅读全文
posted @ 2011-10-25 09:51 Jack Tung 阅读(100) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2011-10-25 08:59 Jack Tung 阅读(4) 评论(0) 推荐(0)