优势:
在开发中追求开放扩展,封闭修改,多态的使用使得源程序可以更方便的进行扩展而不需要修改源代码。同时多态也使代码的可读性更强。
案例1:利用多态实现计算器类
class AbstractClaculator
{
public:virtual int getResult(){return 0;}int m_Num1;int m_Num2;
};
class Addcalculator:public AbstractClaculator
{int getResult(){return m_Num1 + m_Num2;}
};
class Subcalculator :public AbstractClaculator
{int getResult(){return m_Num1 - m_Num2;}
};
class Mulcalculator:public AbstractClaculator
{
public:int getResult(){return m_Num1 * m_Num2;}
};
void test02()
{//多态使用条件//父类指针或引用指向子类AbstractClaculator* abc = new Addcalculator;abc->m_Num1 = 10;abc->m_Num2 = 10;cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl;delete abc;abc = new Subcalculator;abc->m_Num1 = 100;abc->m_Num2 = 100;cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl;delete abc;abc = new Mulcalculator;abc->m_Num1 = 10;abc->m_Num2 = 10;cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;delete abc;
}
案例2:利用多态实现制作饮品的类
class AbstractDrinking
{
public:virtual void Boil() = 0;virtual void Brew() = 0;virtual void PourInCup() = 0;virtual void Put() = 0;void makeDrink(){Boil();Brew();PourInCup();Put();}
};
class Tea :public AbstractDrinking
{virtual void Boil(){cout << "烧矿泉水" << endl;}virtual void Brew(){cout << "放入茶叶" << endl;}virtual void PourInCup(){cout << "将茶叶放入杯中" << endl;}virtual void Put(){cout << "加入枸杞和菊花" << endl;}
};
void doWork(AbstractDrinking* abs)
{abs->makeDrink();delete abs;
}
void test01()
{doWork(new Tea);
}
如果需要增加其他种类的饮品,只需要写新的子类,而不需要修改原来的基类AbstractDrinking