多态满足条件:
- 有继承关系
- 子类重写父类中的虚函数
多态使用:
父类指针或引用指向子类对象
方法1:使用父类引用(推荐)
方法2:使用父类指针
#include"inherit_06.h"
class AbstractCalculator
{
public:
// 虚函数
virtual int get_result()
{
return 0;
}
int num01;
int num02;
};
class Addition :public AbstractCalculator
{
int get_result()
{
return num01 + num02;
}
};
class Subtraction :public AbstractCalculator
{
int get_result()
{
return num01 - num02;
}
};
class Multiplication :public AbstractCalculator
{
int get_result()
{
return num01 * num02;
}
};
class Division :public AbstractCalculator
{
int get_result()
{
return num01 / num02;
}
};
void calculator(AbstractCalculator &obj,int num_a,int num_b,char oper)
{
obj.num01 = num_a;
obj.num02 = num_b;
obj.get_result();
cout << obj.num01 << oper << obj.num02 << "=" << obj.get_result() << endl;
}
void inherit_06_test_01()
{
//多态满足条件:
//1、有继承关系
//2、子类重写父类中的虚函数
//多态使用:
//父类指针或引用指向子类对象
// 方法1:使用父类指针
AbstractCalculator* abc = new Addition;//父类指针指向子对象
abc->num01 = 1;
abc->num02 = 2;
abc->get_result();
cout << abc->num01 << "+" << abc->num02 << "=" << abc->get_result() << endl;
delete abc;//用完了记得销毁
abc = new Subtraction;
abc->num01 = 1;
abc->num02 = 2;
abc->get_result();
cout << abc->num01 << "-" << abc->num02 << "=" << abc->get_result() << endl;
delete abc;//用完了记得销毁
abc = new Multiplication;
abc->num01 = 1;
abc->num02 = 2;
abc->get_result();
cout << abc->num01 << "*" << abc->num02 << "=" << abc->get_result() << endl;
delete abc;//用完了记得销毁
abc = new Division;
abc->num01 = 1;
abc->num02 = 2;
abc->get_result();
cout << abc->num01 << "/" << abc->num02 << "=" << abc->get_result() << endl;
delete abc;//用完了记得销毁
// 方法2:使用父类引用
Addition add;
Subtraction sub;
Multiplication multp;
Division div;
calculator(add, 6, 4, '+');
calculator(sub, 16, 4, '-');
calculator(multp, 2, 4, '*');
calculator(div, 6, 3, '/');
}