优势:
在开发中追求开放扩展,封闭修改,多态的使用使得源程序可以更方便的进行扩展而不需要修改源代码。同时多态也使代码的可读性更强。
案例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