01 2014 档案

摘要:在C++中,非常常用的一种技术就是智能指针,智能指针其实是RAII技术的一种应用,通过构建类类型实例的生命周期来管理指针,控制指针的初始化和资源释放。 具体而言,智能指针都需要重载-> 和 * 操作符,从而可以采用标准的指针语法来使用它们,有时候还有一些指针的运算操作符,+,-,+=,-=,++,--等等 通常智能指针会被实现为一个模板: 1: template 2: class... 阅读全文
posted @ 2014-01-22 08:01 博海拾贝 阅读(276) 评论(0) 推荐(0)
摘要:template method 模式,模板方法模式 其实他和C++模板没有关系。 前者是提供的为派生类设计者提供清晰指示的一种方法,这个事实表示“如何去实现基类所规定的契约” 基类可以自由的通过公有成员函数指定与外界的契约关系,并通过受保护的成员函数为派生类的行为指明额外的细节,私有成员函数也可以用做类实现的一部分。一般数据成员应该是私有的。 如果积累的成员是非虚拟的,那么积累的设计者就为以该积累... 阅读全文
posted @ 2014-01-15 21:59 博海拾贝 阅读(298) 评论(0) 推荐(0)
摘要:重载与重写其实没有关系,只是在使用过程中,由于某些函数的命名的问题不注意,让我们产生了不计其数的bug 当位于同一个作用域中的两个或者更多个函数名字相同但是参数数目不同,或者数目相同但参数类型不一样的函数相互之间就会发生重载。即函数在调用的时候,会按照参数列表优先选择最匹配的函数进行调用;—— 这样就形成了,同一个函数名称(操作方法),按照其传进的参数不同(原料不同), 得到不同的函数的调用(结果... 阅读全文
posted @ 2014-01-15 21:22 博海拾贝 阅读(429) 评论(0) 推荐(0)
摘要:继承标准STL的函数对象 1: struct PopLess : public atd::binary_function 2: { 3: bool operator() { const State &a, const State &b } const 4: { 5: return popless(a,b); 6: } ... 阅读全文
posted @ 2014-01-13 22:33 博海拾贝 阅读(262) 评论(0) 推荐(0)
摘要:当一个函数对象被当做回调时候,就是一个command模式的实例 什么是回调? 回调就是框架知道什么时候干一些事情,但是具体干什么,或许框架一无所知(因为回调函数不是他设计的),而用户则知道发生一个特定事件的时候,应该干什么,但是他不知道什么时候去干这个事情。这两个部分共同构成了一个完整的应用程序。 常见的回调函数的实现方式是函数指针,类似如下的方式: extern void playmusic(... 阅读全文
posted @ 2014-01-13 22:06 博海拾贝 阅读(401) 评论(0) 推荐(0)
摘要:这一点与指向成员的指针类似,其实现可能更加复杂,因为成员函数同时还存在虚拟函数,需要动态绑定执行动作。当然这种属性是属于函数本身的,此处表达的是指针不涉及函数的属性问题。 1: class shape 2: { 3: public: 4: // void moveTo(point newLocation); 5: bool validate(); 6: //… 7: } 8: 9: class circle:: public shape 10: { 11: public: 12: //… 13... 阅读全文
posted @ 2014-01-11 22:02 博海拾贝 阅读(387) 评论(0) 推荐(0)
摘要:指向类成员的类成员的指针说是“指针”,其实是不合适的,因为他既不包含地址,其行为也不像指针常规的指正,包含地址,对其解应用可以得到该指针包含地址所指向的对象 1: int a = 12; 2: int pi = &a; 3: *pi = 0; 4: a = *ip;但是对于指向类成员的指针不是内存中特定的位置,他指向的是一个类中的特定成员的位置,而不是指向一个特定对象的成员。一般常见的做法是存储一个类成员对象的偏移地址--相对类起始地址的。 1: class A 2: { 3: public: 4: // … 5: int... 阅读全文
posted @ 2014-01-11 21:07 博海拾贝 阅读(230) 评论(0) 推荐(0)
摘要:将在VC6中编译好的工程放在VS2005中编译结果出现问题: 1: CString test; 2: test.Format("this is for test ");就是上面这句代码visual studio 2005\projects\vc6test\vc6test\vc6test.cpp(22) : error C2664: 'void ATL:... 阅读全文
posted @ 2014-01-06 23:06 博海拾贝 阅读(179) 评论(0) 推荐(0)
摘要:数据抽象, 具有C语言经理的我, 原先是将其看做是一个数据的集合, 把自己常用的数据通过某种方式总结,集合起来, 使用的时候能够更加方便------其实这个还是结构体思想的延续,结构体内部包含了若干的数据(当然,这是一般的说法,也可以添加指正让他具有操作数据的能力),C++的数据抽象,类,将这种思想强化,除了可以包含数据以外还可以包含操作; 类型是一组操作,抽象数据类型则是一组具有某种实现的操作... 阅读全文
posted @ 2014-01-05 21:58 博海拾贝 阅读(256) 评论(0) 推荐(0)