//普通写法
class Calcu
{
public:
int getR(string oper)
{
if (oper == "+")
{
return m_num1 + m_num2;
}
else if (oper == "-")
{
return m_num1 - m_num2;
}
else if (oper == "*")
{
return m_num1 * m_num2;
}
//如果想扩展新的功能,需要修改源码
//在真正的开发中,提倡开闭原则
//开闭原则:对扩展进行开放,对修改进行关闭
}
int m_num1;
int m_num2;
};
void test01()
{
Calcu ca;
ca.m_num1 = 1;
ca.m_num2 = 2;
cout << ca.m_num1 << "+" << ca.m_num2 << "=" << ca.getR("+") << endl;
cout << ca.m_num1 << "-" << ca.m_num2 << "=" << ca.getR("-") << endl;
cout << ca.m_num1 << "*" << ca.m_num2 << "=" << ca.getR("*") << endl;
}
多态的好处:
1.组织结构清晰
2.可读性强
3.对于前期和后期扩展以及维护性高
//利用多态实现
//实现计算器的抽象类
class ABcal
{
public:
virtual int getR()
{
return 0;
}
int m_num1;
int m_num2;
};
//加法计算器类
class add :public ABcal
{
public:
int getR()
{
return m_num1 + m_num2;
}
};
//减法
class sub :public ABcal
{
public:
int getR()
{
return m_num1 - m_num2;
}
};
//乘法
class mul :public ABcal
{
public:
int getR()
{
return m_num1 * m_num2;
}
};
void test02()
{
//多态使用条件:
//父类指针或者引用指向子类对象
ABcal* abc = new add;//用abc这个指针指向add类
abc->m_num1 = 10;
abc->m_num2 = 20;
cout << abc->m_num1 << "+" << abc->m_num2 << "=" << abc->getR() << endl;
//用完后记得销毁
delete abc;//只是把堆区数据释放了,指针还是父类的指针,类型并没有变
//减法运算
abc = new sub;
abc->m_num1 = 10;
abc->m_num2 = 20;
cout << abc->m_num1 << "-" << abc->m_num2 << "=" << abc->getR() << endl;
delete abc;
//乘法运算
abc = new mul;
abc->m_num1 = 10;
abc->m_num2 = 20;
cout << abc->m_num1 << "*" << abc->m_num2 << "=" << abc->getR() << endl;
delete abc;
}