09 2011 档案
虚函数和多态 (二)
摘要: 是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child; 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作.
c++中多态更容易理解的概念为
阅读全文
posted @
2011-09-30 23:17 Yu_ 阅读(348) |
评论 (0) 编辑
虚函数和多态 (一)
摘要: 1、什么是虚函数?
①、虚函数必须是基类的非静态成员函数
②、其访问权限可以是protected或public。不能是private ,因为子类继承时,子类不能访问。
③、在编译时是动态联编的::编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。 动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数
2、定义形式。
virtual 函数返回值类型 虚函数名(形参表)
{ 函数体 }
纯虚函数:virtual 函数名=0
3、虚函数内部机制。
①、每个实例对象里有自己的指针。
②、虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。
③、我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。
阅读全文
posted @
2011-09-30 21:58 Yu_ 阅读(349) |
评论 (0) 编辑
类继承和子类型 多继承和虚拟继承
摘要: 关于基类,派生类的相关补充:
1、 派生表中指定的类必须先被定义好,方可被指定为基类。
2、 派生类的前向声明不能包括其派生表,而只需要类名即可。
3、 缺省的继承是private。
4、 继承而来的派生类的虚拟函数一般加上virtual较好,也可以省略。但基类中一定要声明为virtual。
5、 对于基类的静态成员,所有派生类对象都引用基类创建的这个相同,单一,共享的静态成员,而不是创建该派生类的另一个独立的静态成员。
6、 友员关系不会被继承,派生类没有成为“向它的基类授权友谊的类”的友员。
阅读全文
posted @
2011-09-30 16:18 Yu_ 阅读(393) |
评论 (0) 编辑
GoF23小结
摘要: 一、 什么是设计模式。
毫无疑问,设计模式是前人总结下来,一些设计经验经过被反复使用、并为多数人知晓、经过分类编目。模式是一种问题的解决思路,它已经适用于一个实践环境,并且可以适用于其他坏境。
最终由GoF总结出23种设计模式。
二、 为什么要使用。
阅读全文
posted @
2011-09-29 08:12 Yu_ 阅读(361) |
评论 (0) 编辑
Bridge 桥模式
摘要: 1、什么是Bridge模式?
这个问题我用一言两语实在无法概括其根本。不过我是这样分析的:
①、对象这个概念可以认为是由“属性”和“行为”两个部分组成的。属性我们可以认为是一种静止的,是一种抽象;一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。
②、Bridge模式是解决多层继承的。如果你在实现应用中一个类,需要继承两个以上的类,并且这两者之间又持有某种关系,它们两个都会有多种变化。Bridge模式是把这两个类,分解为一个抽象,一个实现,使它们两个分离,这样两种类可以独立的变化。举一个例子:
阅读全文
posted @
2011-09-27 18:42 Yu_ 阅读(331) |
评论 (0) 编辑
深拷贝、浅拷贝 与拷贝构造函数的关系
摘要: 拷贝即是通常所说的复制(Copy)或克隆(Clone),对象的拷贝也就是从现有对象复制一个“一模一样”的新对象出来。虽然都是复制对象,但是不同的复制方法,复制出来的新对象却并非完全一模一样,对象内部存在着一些差异。通常的拷贝方法有两种,即深拷贝和浅拷贝,那二者之间有何区别呢?
我的理解是:
1、深拷贝和浅拷贝之间的区别在于是否复制了子对象。
2、如果一个类拥有资源(堆,或者是其它系统资源),,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。
阅读全文
posted @
2011-09-27 01:24 Yu_ 阅读(369) |
评论 (0) 编辑