题意整理。

  • 给定一个父类BaseCalculator,子类AddCalculator和SubCalculator继承自BaseCalculator。
  • 要求BaseCalculator中提供getResult方法,子类AddCalculator实现两个成员相加,子类SubCalculator实现两个成员相减。

方法一(多态)

1.解题思路

  • 在父类BaseCalculator中,声明getResult方法,并添加标识符virtual。
  • 在子类AddCalculator中重载getResult方法,实现相加功能。
  • 在子类SubCalculator中重载getResult方法,实现相减功能。

图解展示: alt

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.复杂度分析

  • 时间复杂度:需要进行常数次操作,所以时间复杂度为O(1)O(1)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)