# 简单计算器

URL: https://caijiao.org/cpp/project/calculator
Source: docs/cpp/project/calculator.md
Description: 本节介绍如何设计和实现一个简单的计算器程序，支持加减乘除四则运算。

一个简单的计算器可以实现常见的数学运算，如加法、减法、乘法和除法。以下将展示如何用 C++ 实现一个简单的命令行计算器。

## 功能需求

该计算器需要实现以下功能：

- 支持加法、减法、乘法和除法四则运算。
- 处理用户输入，支持两个数字的运算。
- 判断除数是否为零，以避免除零错误。
- 支持重复计算，直到用户选择退出。

## 系统设计

### 1. 运算函数

首先，我们可以设计一个 `Calculator` 类，其中包含四个基本运算函数：加法、减法、乘法和除法。

```cpp
#include <iostream>
using namespace std;

class Calculator {
public:
    double add(double a, double b) {
        return a + b;
    }

    double subtract(double a, double b) {
        return a - b;
    }

    double multiply(double a, double b) {
        return a * b;
    }

    double divide(double a, double b) {
        if (b == 0) {
            throw invalid_argument("除数不能为零");
        }
        return a / b;
    }
};
````

### 2. 用户交互

接下来，我们设计主函数来与用户交互，获取输入并进行运算。

```cpp
int main() {
    Calculator calc;
    double num1, num2;
    char op;
    bool keepRunning = true;

    cout << "欢迎使用简单计算器！" << endl;

    while (keepRunning) {
        cout << "请输入第一个数字：";
        cin >> num1;
        
        cout << "请输入运算符 (+, -, *, /)：";
        cin >> op;
        
        cout << "请输入第二个数字：";
        cin >> num2;

        try {
            switch(op) {
                case '+':
                    cout << "结果: " << calc.add(num1, num2) << endl;
                    break;
                case '-':
                    cout << "结果: " << calc.subtract(num1, num2) << endl;
                    break;
                case '*':
                    cout << "结果: " << calc.multiply(num1, num2) << endl;
                    break;
                case '/':
                    cout << "结果: " << calc.divide(num1, num2) << endl;
                    break;
                default:
                    cout << "无效的运算符！" << endl;
                    break;
            }
        } catch (const invalid_argument& e) {
            cout << e.what() << endl;
        }

        cout << "是否继续计算？(y/n): ";
        char choice;
        cin >> choice;
        if (choice != 'y' && choice != 'Y') {
            keepRunning = false;
        }
    }

    cout << "感谢使用计算器！" << endl;
    return 0;
}
```

## 总结

通过以上步骤，我们实现了一个简单的计算器程序，支持加法、减法、乘法和除法运算。该程序处理用户输入，支持多次运算并能够处理除数为零的错误。设计简洁，易于扩展，可以根据需求增加更多功能，如支持更多的数学运算或输入验证等。
