- 博客(20)
- 资源 (3)
- 收藏
- 关注
原创 个人作品——豆瓣FM客户端
下载地址:RayFile网盘XP、WIN7测试可用,纯绿色版,解压即用;最新版本:0.8.0.2 Alpha(部分功能尚未完善,或者不稳定,敬请谅解)最后更新:2012-02-12 20:00版本更新:0.8 Alpha 优化播放逻辑、列表获取逻辑和歌词显示逻辑,优化登录逻辑0.7 Alpha 更新了豆瓣音乐频道,半成品的加心功能,修复部分BUG0.6 Alpha 加入
2012-02-13 20:08:17 1560 2
原创 从抽象到模式——面向对象之旅(三)、设计模式的力量
上一节,我们引入了一个不大不小的变更,然而不经思考的编码却给我们带来了不少麻烦。万不得以,只能重构。Class Filter{public: Filter(RuleReader *ruleReader); virtual ~Filter(); void InitRules(); virtual void CheckRequest(str
2009-06-21 22:25:00 806
原创 从抽象到模式——面向对象之旅(二)、代码的坏味道
在上一节中,我们设计了一个过滤器的抽象类,并且在客户代码中通过抽象,很好地利用了类的接口。瞧,抽象是多么地强大,多态是多么强大!天是蓝的,水是清的,生活真是美好啊(Copy某位大师的口吻^_^)。 但是,不要高兴太早,问题来了。现在,我们有一个新的需求: 为了提供更好的扩展性,要求每个过滤器除了提供一套默认规则之外,还要允许客户(即系统的使用者)可以根据需要对规则进行扩充,当然,
2009-06-21 21:33:00 871
原创 从抽象到模式——面向对象之旅(一)、抽象的魅力
最近一段时间,笔者设计了一款过滤器插件,用以对某系统的用户请求进行过滤,本系列文章即记载了整个过滤器插件开发过程中的一些面向对象设计的小事,一方面见证笔者对面向对象设计的一次探索,另一方面也是记录下来供大家一起学习和讨探。 在本系列文章中,您将会看到我们是如何从最初的过滤器类的抽象,利用面向对象原则、设计模式等,一步一步将我们的项目重构成为最终看起来还比较“优雅”的样子。由于我们这里只讨
2009-06-21 19:53:00 989
原创 软件模块的三个职责
第一个职责是它运行起来所完成的功能。这也是该模块得以存在的原因。第二个职责是它要应对变化。几乎所有的模块在它们的生命周期中都要变化,开发者有责任保证这种改变应该尽可能地简单。一个难以改变的模块是拙劣的,即使能够工作,也需要对它进行修正。第三个职责是要和阅读它的人进行沟通。对该模块不熟悉的开发人员应该能够比较容易地阅读并理解它。一个无法进行沟通的模块也是拙劣的,同样需要对它进行修正。
2009-04-20 22:00:00 1125
原创 由中兴一道笔试题想到的
c++编程实现: 一个Point类,然后一个Circle类,继承Point类。circle类能够实现求圆的面积,移动圆的位置,改变圆的大小。 基于实际应用的考虑:Circle派生自Point,乍一想圆缩小到最后不就是个点嘛,这个还算合情合理。但是当圆遇到圆心时问题就出现了。A Circle is not a Point. It is implemented in terms of
2008-11-02 11:20:00 1357 1
原创 C++泛型idioms之一: trait
刚着手写这篇文章的时候,实在不知道该从何处下笔,关于泛型技术有太多的东西可写。 这里我不打算详细讲解关于泛型,关于template的语法细则,单单这一部分完全可以写一本书出来,而且也确实已经有很好的资源可以供我们参考----《C++ Templates - The Complete Guide》。除了语法,还有什么?Template?STL?是的,对于C++来说,泛型程序设计本身就是基于模
2008-10-04 10:07:00 2665
原创 STL 中的List排序算法(in SGI STL)
template class T, class Alloc>void list::sort() { if (node->next == node || link_type(node->next)->next == node) return; list carry; list counter[64]; int fill = 0; while (!empty(
2008-06-05 19:46:00 1683
原创 面向对象设计的原则
SRP 单一职责原则 就一个类而言,应该仅有一个引起它变化的原因。OCP 开放——封闭原则 软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。LSP Liskov替换原则 子类型必须能够替换掉它们的基类型。DIP 依赖倒置原则 抽象不应该依赖于细节。细节应该依赖于抽象。ISP 接口隔离原则
2008-05-28 22:37:00 871
原创 2007年百度之星程序设计大赛初赛题目——百度的高级搜索方法
题面描述: 你尝试过在百度上使用 site inurl 语法查询吗 ? 如果还没有的话可以试一下 :) 如输入 site:www.baidu.com inurl:news 则会搜出所有在 www.baidu.com 站点上的包含 "news" 子串的 url 。 现在我们有两份数据,一份是 site_inurl.txt 一份是 url.txt site_inurl.txt 中
2008-05-24 22:44:00 1224
转载 The Ruby Way ——"未来属于动态语言”
跟很多人一样,我学习程序设计是从Basic语言开始的。然而在初步了解了程序设计的基本概念之后,我便迅速地转向了C语言,并且在上面下了一番苦功夫。是C语言帮助我逐步理解了计算机系统以及算法、数据结构等基础知识,从而迈入程序设计的大门之中的。C语言出色地实现了真实计算机系统的抽象,从而表现出极佳的适应性和强大的系统操控能力。直到今天,我仍认为认真理解和实践C语言是深入理解计算机系统的捷径。然而,当我尝
2008-05-19 23:19:00 1051
原创 《深度探索C++对象模型》读书笔记5:临时性对象
一、什么时候会导致编译器产生临时性对象?在某些环境下, 由processor产生临时性对象是有必要的,亦或是比较方便的,这样的临时性对象由编译器来定义。可能产生临时性对象的情况有三种:1、形如下式的变量初始化,会产生一个临时性对象,放置a+b的结果,然后再使用T的copy constructor把该临时性对象作为C的初始值。但若直接以拷贝构造的方式,将a+b的值放到c中,就不需要临
2008-04-11 09:47:00 1007
原创 又见const
代码很简单:void foo(const char **p);int main(int argc, char **argv){ foo(argv); return 0;}问题很蹊跷:VC编译器报错:不能将参数1从char **转换为const char ** 出错原因:两个指针的类型不同,一个为char *,另一个
2008-03-04 13:08:00 1103 3
原创 C语言指针的初始化和赋值
最近写了一个小程序,遇到一点小问题,是关于指向字符串的指针的。由此一发不可收拾,好奇心驱使我决定研究一下指针的初始化和赋值规则。略有所得之后,执笔记下,以备后用。1、指针的初始化初看起来,指针的初始化和赋值好像很混乱,又是*,又是&,时不时又出来一个数组。其实总结起来很简单:int *p; int a=25; int b[10];int *m=&a;int *n=b;
2008-01-17 21:04:00 38450 19
原创 《深度探索C++对象模型》读书笔记4:构造语意学,编译器背着我们做了什么?
对于C++程序员而言,编译器背着我们做了太多的事情。这一节,我将要带你一起发掘编译器对于对象构造过程的干涉。1、 Default ConstructorC++新手一般有两个常见的误解:1) 任何class如果没有定义default constructor ,就会被合成出一个来。2) 编译器合成出来的default constructor会明确设定类内每一个数据成员的
2008-01-15 21:16:00 1400
原创 《深度探索C++对象模型》读书笔记3:C++中的多态,这跟指针有什么关系?
1、 C++的运行时多态因为每个派生类对象中都包含基类部分,所以可将基类类型的引用或者指针绑定到派生类对象中的基类部分,而对象本身并不会改变,仍为派生类对象。通过该指针或者引用调用虚函数时,编译器将生成代码,在运行时确定调用哪个函数,被调用的是与动态类型相对应的函数,也就是派生类中定义的虚函数实现。而且,只有通过引用或者指针调用,虚函数才会在运行时确定。如果调用的是非虚函数,
2008-01-05 16:30:00 1606 1
原创 《深度探索C++对象模型》读书笔记2:C++对象模型,我的虚拟函数被放在哪里?
首先,让我们来看一下C++类对象中,各种成员是如何布局的,即C++对象模型。本篇内容也是今后讨论C++底层经常要用到的,因此在进一步深入研究C++的其他主题之前,了解一下本文的内容是非常必要的。C++对象模型,从简单对象模型到表格驱动对象模型,几经演变,最终形成了C++标准中的对象模型。 1、C++对象模型众所周知,在C++类中,有两种数据成员:static和nonstatic,三
2008-01-05 13:03:00 1350
原创 《深度探索C++对象模型》读书笔记1:引言,《深度探索C++对象模型》值得一读
《深度探索C++对象模型》为我们揭开了C++语言封装背后的技术细节,读完之后有一种“醍醐灌顶”的感觉。我想把自己的心得书写成文,一方面跟朋友们分享C++底层的奥秘,另一方面也是对C++的一次复习和总结。我会尽量用浅显的语言让朋友们在读完这系列文章之后,能够对《深度探索C++对象模型》有一个比较全面的认识。当然,如果您有什么不懂的地方也可以留言以交流。在这个系列的文章中,我会从一个初学者的角
2008-01-05 11:10:00 1020
转载 [转]李开复:算法的力量
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是
2007-11-06 13:08:00 844 1
原创 浅谈缓冲区溢出(整理自《深入理解计算机系统》)
一、综述在x86体系结构下, C++/C对数组引用不进行任何边界检查,而且函数调用过程中局部变量和状态信息(例如寄存器值和返回指针)都存放在栈中。当这两种情况结合到一起的时候,就有可能导致严重的程序错误,一个对越界的数组元素的写操作会破坏存储在栈中的状态信息,而当程序使用这个被破坏的状态,并试图重新加载寄存器或执行ret指令(返回调用函数)时,就会产生严重的错误。二、C++/C中的数组
2007-08-17 22:05:00 2333
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人