上一页 1 2 3 4 5 6 7 8 ··· 12 下一页
摘要: 一直以为自己对多态和继承已经比较了解,当遇到虚继承的时候,发现有点犯晕,想不通了,于是在微博上向几个大神请教,很快得到了他们的回复,高兴之情无以言表。之后自己查了一些资料,结合大神的回复,在这里做一下简单的记录。我的问题如下:为什么虚继承类的sizeof要大些啊,是因为虚继承中,子类有指向父类的指针和指向父类的虚函数表的指针吗,比非虚继承多了这两个指针? @左耳朵耗子 @简悦云风 @GeniusVczh@GeniusVczh:调用的时候给的this和函数实际需要的this的指针不一定是一样的,多重继承的时候已经这样了。再加上你还有virtual继承,所以需要很多描述。V福尔摩斯回复 @Geni 阅读全文
posted @ 2013-05-15 10:20 啊汉 阅读(3720) 评论(5) 推荐(3) 编辑
摘要: 前几天看了开源的XML文件解析器TinyXml,它是怎么实现解析的没怎么看懂,于是决定自己实现一个,反正最近不忙。先命名为TXml。现在完成了解析和查询功能,全部代码加起来不到1000行,将会继续完善它。源码必共享先简单说一下我的思路:1:读取XML文件信息,并存入一个字符数组中;2:遍历数组,将数组解析成一棵树;3:以路径的方式查询和按属性查询;这个解析器最麻烦的地方就在怎么将字符数组解析成一颗树。我们先看一下一个简单XML文件,他包括文件头、节点、节点名称及节点值、属性名称及属性值,子节点、父节点、注释等。<?xml version="1.0" encoding= 阅读全文
posted @ 2013-04-11 15:58 啊汉 阅读(6312) 评论(3) 推荐(1) 编辑
摘要: 1:用Interlocked系列函数实现线程同步;2:用CRITICAL_SECTION及其系列函数实现线程同步;3:用RTL_SRWLOCK及其系列函数实现线程同步;4:用事件内核对象实现线程同步;5:用信号量内核对象实现线程同步;1:用Interlocked系列函数实现线程同步实例如下://旋转锁#include using namespace std; #include #include const int threadNum=10;HANDLE hThread[threadNum];volatile unsigned int ISOK=0;unsigned int _stdcal... 阅读全文
posted @ 2013-03-31 14:46 啊汉 阅读(24371) 评论(1) 推荐(3) 编辑
摘要: 1:试着用最少的比较次数去寻找数组中的最大值和最小值。思路一:扫描数组两次,第一次等到最大值,第二次等到最小值。总共比较次数2N,这是大家都可以想到的。思路二:定义两个变量存放最大值和最小值,将数组两两分组,两两进行比较,大的和最大值进行比较,小的和最小值比较,数组两两比较次数是N/2,分别与最大值和最小值比较的次数为N,总共比较次数1.5N。好久没写算法了,于是蛋疼得想实现一下。//1:试着用最少的比较次数去寻找数组中的最大值和最小值。 void FindMaxMin(int *A,int size,int* Max,int* Min){ int i=(size & 1)?1:0; 阅读全文
posted @ 2013-03-28 10:35 啊汉 阅读(3969) 评论(11) 推荐(3) 编辑
摘要: 最近看了一下吴军的数学之美。书很好,废话我就不多少了。看了第9章图论和网络爬虫,一直都觉得网络爬虫很牛B,搜索引擎不就是用爬虫爬网页的吗,于是想写一个简单的爬虫来爬网页试试,最先想到的就是给自己的博客建一个目录,够小够简单了吧,于是就有了这篇文章,简单的分享一下,先申明我的实现很简单没有技术含量,在看下文之前可以先看看 我的博客目录。 源码必共享简单介绍一下网络爬虫的原理:给你一个网页地址,先把这个网页下载下来,然后分析这个网页的内容,得到这个网页中的所有链接,然后下载这些网页,继续分析下载。这样就能下载互联网上的很多网页。原理就这么简单,实现起来就不那么容易了。由于深入不了只能说简单的。构造 阅读全文
posted @ 2013-02-20 15:38 啊汉 阅读(3252) 评论(12) 推荐(11) 编辑
摘要: C/C++(42)COM是一个更好的C++15道简单算法题非递归实现文件夹遍历《STL系列》之map原理及实现《STL系列》之vector原理及实现C#转C++的一点分享内存的分配VS回收&构造函数VS析构函数内存池的原理及实现构造函数产生的点及原因虚方法的调用是怎么实现的(单继承VS多继承)C++... 阅读全文
posted @ 2013-02-20 11:29 啊汉 阅读(3701) 评论(3) 推荐(1) 编辑
摘要: 需求简单分析。玩过连连看的都知道,连连看其实就是测试能不能用少于等于3条相连的线,连接两个点(图片)。线的条数为0~3条。先只实现了逻辑,并做了智能测试,程序自己可以演示玩连连看的过程,界面还没有做,准备用QT(不熟),源码下载0条线表示两个点相邻,在坐标轴上看就是X轴相同,Y轴值相差1,或是Y轴相同X轴值相差1。1条线表示两个点同X或是同Y轴,且两点之间没有其他点。2条线表示两个点确定的长方形,存在连接两个点的两边上都没有其他任何点3条线复杂点,经过反复的思考,决定将3条线的情况分成5类:上下左右中(东南西北中)。这样的分类主要是想让代码更好理解,思路看起来更简单点。上:连接两个点的3条线的 阅读全文
posted @ 2013-02-04 14:21 啊汉 阅读(9052) 评论(7) 推荐(10) 编辑
摘要: 1:多余的存储引用导致性能降低;2:利用局部性提高程序性能;先来说说引用是怎么降低程序性能,个人认为降低程序性能主要有两个原因,一是数据结构选择不合理,二是多层嵌套循环导致部分代码被多余重复执行。在第二种情况下我们一般都是优化循环最里层的代码,能提出来的尽量往外层提,实在不行的就优化它的运行速度。1:多余的存储引用导致性能降低。先来看一个关于引用导致性能降低的问题。下面两个方法哪个更快。 static void Test2(ref int sum) { for (int i = 1; i <= timer; i++) { ... 阅读全文
posted @ 2013-01-13 17:14 啊汉 阅读(3115) 评论(15) 推荐(10) 编辑
摘要: 系统中的所有线程都要访问系统资源,一个线程霸占某个资源,其他需要该资源的线程就不能完成自己的任务;另外如一个线程在读取某块内存中的数据,而另一个线程又正在修改这块内存的值,这同样不是我们想要的,所以线程之间必须要有一套自己的规则,不然就凌乱了。线程之间需要通信,如A线程霸占某个B线程需要的资源X,在A占用期间,B线程只能等待,或处于挂起状态,当A线程用完资源X后,系统会告诉线程B,资源X可以用了,或是将处于挂起状态的线程B唤醒,然后线程B就获得对资源X的控制权,其他想用资源X的线程就得经历B刚才的遭遇。当多个线程同时需要某个资源时必须遵守下面两个规则:1:多个线程“同时”访问资源,不能破坏资源 阅读全文
posted @ 2012-12-30 22:12 啊汉 阅读(6959) 评论(0) 推荐(1) 编辑
摘要: 线程由两部分组成:线程内核对象和线程栈。关于内核对象请看windows内核对象简介。线程内核对象,操作系统用线程内核对象来管理线程,操作系统还用它来存放统计信息。线程栈,用于维护线程执行时所需的所有函数参数和局部变量,就是C#程序员常说的线程栈和托管堆中的线程栈。我们知道进程是有惰性的,它的所有工作都是由线程完成的,而进程只是为线程提供场地,线程函数执行我们让它执行的任务,最终线程函数将终止运行并返回,线程将终止运行,线程的内存将被释放,线程内核对象的使用计数将减一,如果线程内核对象的使用计数减为0,线程内核对象将被销毁。说了这么多,感觉有点虚,我们还是来看看创建线程的函数吧。CreateTh 阅读全文
posted @ 2012-12-16 22:49 啊汉 阅读(4681) 评论(0) 推荐(3) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 12 下一页