?
然后我们再去看一个使用多态的案例,可以看到我们需要写一个制作饮品的父类,有公共的纯抽象方法,这个制作饮品的父类做为一个抽象类,然后子类我们有咖啡,有茶...
?
然后我们去做,可以看到,我们有个抽象的drinking这个类,里面有纯虚函数,煮水,冲泡,纯虚函数
?
然后有导入杯中,有加入辅料纯虚函数.
?
然后我们在这个抽象类中再提供一个,制作饮品的方法
在方法中,我们调用,上面我们写好的制作饮品的流程的,纯虚函数就可以了
?
然后我们去写一个Coffee这个子类去,可以看到,这个子类Coffee继承了,父类抽象的制作饮品这个类.
?
然后,我们在Coffee这个咖啡的子类中去,实现父类中的纯虚函数.
?
把父类中的所有的纯虚函数都重写就可以了
?
上面已经把Coffee子类的,所有代码都帖上了.
?
然后我们再来写一个制作茶叶的子类
Tea,也是继承制作饮品的父类抽象类,然后
也是去分别实现父类中的纯虚函数.
?
这样我们的两个子类就已经写完了
?
然后我们去测试,首先去写一个doWork这个方法,可以看到参数是,传入一个
父类的指针,AbstractDrinking * abs
然后,我们写一个test01,方法,然后调用doWork并且传入一个new Coffee对象,
要注意这里,new Coffee用new关键字,这样写的话,因为是在堆区创建的对象,所以
回返回一个指针,正好,doWork函数,也需要一个指针参数.
?
在main函数中调用,test01测试方法以后,执行看结果.
可以看到没问题,这样我们就通过代码,制作出了一杯咖啡.
?
这里还要注意,因为我们这里调用doWork函数的时候,
传入参数用的是new关键字,在堆区创建的对象,所以这里,用完堆区的对象以后,要记得使用delete abs;
delete 后面加指针,去清空指针对应的堆区空间.
而且上面我没有添加,最好,再添加一句,
abs = NULL; 防止空指针异常.
?
然后上面我们又创建了一个tea的,饮品,然后我们执行去看效果
可以看到没问题对吧.
?