后面讲到的广义表实际上采用的就是这种方法。显而易见的,这样的mobject支持的对象是预先确定的,你将自己维护objecttype列表,每添加一种类型的支持,你需要在objecttype列表中给出它的替代值,然后在相应的switch(objecttype)给出这种类型的case语句。很烦人是吧,下面给出另一种方法,其实还是这个原理,不同的是,把这个烦人的工作交给编译器了。
还记得前边强调的原则吗,为什么我们将不同类型的对象放在一个链表中呢?很显然,我们想达到这样的一个效果:比如说,我们在一个链表中储存了三角形,直线,圆等图形的参数,我们希望对某个节点使用draw()方法,就重绘这个图形;使用get()则得到这个图形的各个参数;使用put()则修改图形的参数。可以看出,这些不同的对象实际上有同样的行为,只是实现的方法不同。
c++的多态性正好可以实现我们的构想。关于这方面,请参阅相关的c++书籍(我看的是《c++编程思想》)。请看如下的例子:
#ifndef shape_h
#define shape_h
class shape
{