摘要:
Prototype一 意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。二 动机 在图形编辑器中增加音符编辑构造乐谱编辑器的例子中。GraphicTool作为图形编辑器的框架,其中提供了可以添加的图形;Graphic作为图形类的基类,新增加的音乐相关符号也都从Graphic派生。要实现乐谱构造器,需要新增加图形,供GraphicTool添加使用。 如果仅仅是增加新的Graphic派生类,并且再对每一个Graphic实现copy自己。我想了很久也不知道怎么去实现……增加了新的Graphic派生类,但是GraphicTool仍然是不知道增加了新的图形,要么扩展Grap... 阅读全文
摘要:
static_cast与dynamic_cast转换 一 C语言中存在着两种类型转换:隐式转换和显式转换隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成char ch;int i = ch;显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加char *pc = (char*)pb;void *ps = (void*)pa;二 C++中的类型转换 通过这两种方式,C语言中大部分的类型转换都可以顺利进行。至于能不能进行转换,转换后的结果如何,编译器不管需要用户自己去控制。 C++继承了C中的隐式和显式转换的方式。但这... 阅读全文
摘要:
内存管理与智能指针 C++中不具备对内存的自动管理机制,垃圾回收机制。内存管理是一件复杂的事情和重要的事情,面对庞大的对象群,复杂的逻辑,甚至多线程中,是不能保证对象的每一次使用都正确,申请的内存都能被合理的释放。但是又必须确保这件事情的正确执行,否则系统将无法正常的工作。 最近在学习平台上的一些感觉非常棒的设计方法和机制的应用,结果却不断的发现有太多的基于C++基础如模板,指针,虚函数等应用,而我却不甚理解,也感觉到C++这门语言是何其强大和深奥,不是学会了语法就能掌握的,灵活的应用才是最困难的和不易掌握的。 本篇将简单探究一下C++中所谓的智能指针问题。一 Boo... 阅读全文
摘要:
一 函数指针 函数指针就是一个指向函数起始地址的指针变量。二 普通函数指针 C/C++语言中,函数相当于汇编中的参数入栈和调用proc,函数就是将这两个过程封装起来。函数名就代表函数的起始地址。要调用这个函数,就要找到对应的起始地址。有了起始地址就可进入带函数体中执行代码。下面看几个例子:typedef void (*Ps_Func0)(void); //指向返回值为void和无参的函数typedef void (*Ps_Func1)(int); //指向返回值为void和参数为int的函数typedef void (*Ps_Func2)(int,int); ... 阅读全文
摘要:
C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值。下面看看两种方式有何不同。 成员变量初始化的顺序是按照在那种定义的顺序。1 内部数据类型(char,int……指针等)class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) //B函数体内初始化 { m_weight = weig... 阅读全文
摘要:
析构函数 Destructor 当一个对象的生命周期结束(超出范围或者主动释放)时, 调用对象的析构函数来回收其所占用的存储空间(对象,动态内存等)和资源(信号量,互斥锁等)。一 普通虚构函数class ConcreateObject: public object{public: ~ConcreateObject();};//使用 范围{ ConcreateObject cObj;} ------------->//cObj生命结束 析构函数被调用 ~ConcreateObject()//手动释放ConcreateObject *pCObj = new ConcreateO... 阅读全文
摘要:
Templates定义一个模板使用的关键字:class和typename。在定义作为模板的时候:class和typename,作用是一样的出处:http://www.cplusplus.com/doc/tutorial/templates/一 函数模板1 定义方式template <class identifier> function_declaration; template <typename identifier> function_declaration;2 Exampletemplate <class T>T GetMax (T a, T b){ 阅读全文
摘要:
软件设计方法(转载) 为在平台上解决一个问题,改来改去的跟了很久最后基本发现即可以实现的时候,移植到项目上发现有一个平台自带的无法解决的问题。也是搞了很久都没有解决问题,甚至不清楚问题到底出在哪里,无法继续下去了。 最后还是我同事帮忙一步步分析找到了问题的所在,系统就不支持这种方式。在解决这个问题的过程,我一直请教一个同事虽然他总是摆出一种不屑别人的逻辑和代码的样子。 但是我不得不承认,他在软件开发过程中给我感觉是非常棒的,他是非常讲求“效率,理论,方法,原理”;而他总是在实现一个功能或者解决问题时,要经过理论分析,推导,简化,逐步达到目的的方式,什么样的方法导致什么样的结果,要清清... 阅读全文
摘要:
快速排序一起泡排序每一次比较交换,选出最大的关键字放置到最后一个位置上。时间复杂度:O(n^2)例如: 二快速排序1 基本思想通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的所有关键字小。然后再分别对这两部分继续进行相同的排序分割。树形结构如下: 通常选取待排序记录的第一个值作为基准比较值。2 实现过程(1)过程 (2)分组 (3)代码//交换两个数的值void swap(int& a,int &b){ a = a + b; b = a - b; a = a - b;}//起... 阅读全文
摘要:
Factory Method模式1. 意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。2. 动机框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。在多文档框架中,两个主要的抽象是类Application和Document。客户必须通过它们的子类来做与具体应用相关的实现。例如,为创建一个绘图应用,我们定义类DrawingApplication和DrawingDocument。Application类负责管理Document并根据需要创建它们—例如,当用户从菜单中选择Open或N... 阅读全文