题意整理。
- 给定一个父类BaseCalculator,子类AddCalculator和SubCalculator继承自BaseCalculator。
- 要求BaseCalculator中提供getResult方法,子类AddCalculator实现两个成员相加,子类SubCalculator实现两个成员相减。
方法一(多态)
1.解题思路
- 在父类BaseCalculator中,声明getResult方法,并添加标识符virtual。
- 在子类AddCalculator中重载getResult方法,实现相加功能。
- 在子类SubCalculator中重载getResult方法,实现相减功能。
图解展示:
2.代码实现
#include <iostream>
using namespace std;
class BaseCalculator {
public:
int m_A;
int m_B;
//声明getResult方法,并添加标识符virtual
virtual int getResult();
};
// 加法计算器类
class AddCalculator : public BaseCalculator {
//重载getResult方法,实现加法功能
virtual int getResult(){
return m_A+m_B;
}
};
// 减法计算器类
class SubCalculator : public BaseCalculator {
//重载getResult方法,实现减法功能
virtual int getResult(){
return m_A-m_B;
}
};
int main() {
BaseCalculator* cal = new AddCalculator;
cal->m_A = 10;
cal->m_B = 20;
cout << cal->getResult() << endl;
delete cal;
cal = new SubCalculator;
cal->m_A = 20;
cal->m_B = 10;
cout << cal->getResult() << endl;
delete cal;
return 0;
}
3.复杂度分析
- 时间复杂度:需要进行常数次操作,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。