图7-1形状对外公开一个函数来把自己绘制出来。这是合理的,形状就应该能绘制出来,对吧?由于继承的原因,多边形和圆形也有了绘制自己这个函数。现在我们来讨论在这三个类中的绘制自己的函数都应该怎么实现。在形状中嘛,什么也不做就行了。在多边形中嘛,只要把它所有的顶点首尾相连起来就行了。在圆形中嘛,依据它的圆心和它的半径画一个360度的圆弧就行了。可是现在的问题是:多边形和圆形的绘制自己的函数是从形状继承而来的,并不能做连接顶点和画圆弧的工作。怎 么办呢?覆盖它,覆盖形状中的绘制自己这个函数。于是我们在多边形和圆形中各做一个绘制自己的函数,覆盖形状中的绘制自己的函数。为了实现覆盖,我们需要 把形状中的绘制自己这个函数用virtual修饰。而且形状中的绘制自己这个函数什么也不干,我们就把它做成一个纯虚函数。纯虚函数还有一个作用,就是让 它所在的类成为抽象类。形状理应是一个抽象类,不是吗?于是我们很快写出这三个类的代码如下:class Shape//形状{public: virtualvoid DrawSelf()//绘制自己 { cout << "我是一个什么也绘不出的图形" << endl; }}; class Polygo:public Shape//多边形{public: void DrawSelf() //绘制自己 { cout << "连接各顶点" << endl; }}; class Circ:public Shape//圆{public: void DrawSelf() //绘制自己 { cout << "以圆心和半径为依据画弧" << endl; }};下面,我们将以上面的这三个类为基础来说明动态多态。在进行更进一步的说明之前,我们先来说一个不得不说的两个概念:“子类型”和“向上转型”。| 欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |