题目的主要信息:

  • 要求在BaseCalculator类中提供 getResult() 函数(无需实现)
  • AddCalculator实现两个成员相加(m_A + m_B)
  • SubCalculator实现两个成员相减(m_A - m_B)

具体做法:

因为加法计算器和减法计算器都继承自父类,成员变量也是父类的变量,为了使它们有各自不同的getResult()函数,我们需要在父类及子类函数前添加标识符virtual,让函数可以在子类中重载。这样,父类中可以不用实现该函数,只是挂个名,子类分别实现加减法。

alt

#include <iostream>
using namespace std;

class BaseCalculator {
    public:
        int m_A;
        int m_B;
        // write your code here......
        virtual int getResult(){}//不用实现
};

// 加法计算器类
class AddCalculator : public BaseCalculator {
    // write your code here......
    virtual int getResult(){ 
        return m_A + m_B;
    }
};

// 减法计算器类
class SubCalculator : public BaseCalculator {
    // write your code here......
    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;
        
    cal = new SubCalculator;
    cal->m_A = 20;
    cal->m_B = 10;
    cout << cal->getResult() << endl;
    delete cal;

    return 0;
}

复杂度分析:

  • 时间复杂度:O(1)O(1),直接计算,常数时间
  • 空间复杂度:O(1)O(1),无额外空间