上QQ阅读APP看书,第一时间看更新
2.2.4 企鹅不是鹅中的里氏替换原则
2.2.3小节对计算不同动物跑100米所用时间的实际问题及求解步骤进行了详细说明,UML类图展现了详细的程序设计清单,根据这个程序设计清单可以轻松地实现解决“企鹅不是鹅”问题的代码框架,并且为今后的扩展留足余量。下面就是利用里氏替换原则解决实际问题的程序设计框架。
第一步:设计里氏替换原则的核心——抽象基类Animal。
#pragma once #include <iostream> using namespace std; class Animal { public: //输出用时 void printTime() { cout<<"Which animal? used time: "; } virtual int setFlySpeed(double speed) = 0; };
第二步:新增抽象基类分别对应派生类Goose和Penguin,实现基类的虚方法。
#include "animal.h" class Goose:public Animal { public: int setFlySpeed(double speed) { return speed; } }; class Penguin:public Animal { public: int setFlySpeed(double speed) { return speed; } };
第三步:设计程序框架的入口类calTime,客户端通过这个入口控制软件流程。
#include "goose.h" #include "penguin.h" #include <csignal> #include <cmath> #define dis 100 class calTime { public: void showcalTime(Animal* an, double sp) { an->printTime(); cout<< dis / an->setFlySpeed(sp) <<endl; } };
第四步:客户端调用实现企鹅不是鹅中的里氏替换原则。
int main() { //基类指针指向派生类的对象 Animal *goose = new Goose(); Animal *penguin = new Penguin(); calTime *time = new calTime(); //派生类可以替代基类,根据传参对象和数值进行时间计算 time->showcalTime(goose,20); time->showcalTime(penguin,2); delete goose; delete penguin; delete time; return 0; }
结果显示:
Which animal? used time: 5
Which animal? used time: 50