#include<iostream>
using namespace std;
//多态:分为静态多态和动态多态
//静态多态:函数重载和运算符重载属于静态多态
//动态多态:派生类和虚函数实现运行时多态
//静态多态和动态多态的区别:
//静态多态的函数地址早绑定-编译阶段确定函数地址
//动态多态的函数地址晚绑定-运行阶段确定函数地址
//重写:函数返回值类型、函数名、参数列表 完全一致
//动态多态满足条件:
//1.有继承关系
//2.子类重写父类的虚函数
//动态多态使用:
//父类的指针或引用,指向子类对象
//多态的原理
//虚函数指针(vfptr) 指向 虚函数表(vftable)
//虚函数表内记录虚函数的地址
//多态的优点:
//代码组织结构清晰
//可读性强
//利于前期和后期的扩展以及维护
//真实开发中提倡开闭原则
//对扩展进行开放,对修改进行关闭
//计算器抽象类
class AbstractCalculator
{
public:
virtual int getResult()
{
return 0;
}
int m_num1;
int m_num2;
};
//加法计算器
class AddCalculator:public AbstractCalculator
{
public:
int getResult()
{
return m_num1+m_num2;
}
};
void test()
{
//父类指针或引用指向子类对象
AbstractCalculator *abc=new AddCalculator;
abc->m_num1=10;
abc->m_num2=20;
cout<<abc->getResult();
delete abc;
}
int main()
{
test();
}