c++实现简单计算器
2015-06-06 18:34
435 查看
帮一个同学写的,非计算机类专业,应付交差,也没什么功能,两个数的加减乘除运算,以及三角函数的运算。要求用到模板、运算符重载和异常处理。
一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。
代码如下:
好吧,其实我也不知道为什么要求用模板和运算符重载,感觉没什么必要,典型的作业代码,不过也可能是我思想的局限性。总之,就这样吧。
一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。
代码如下:
#include<iostream> #include<string> #include<cmath> #include<cstdlib> using namespace std; //四则运算 template <class T> class ElementaryArithmetic{ private: T result; T operand1, operand2; char operators; public: //四则运算 void Calculate(); //加法运算 void add(T, T); //减法运算 void subtraction(T, T); //乘法运算 void multiplication(T, T); //除法运算 void divide(T, T); //输出运算符重载 template <class E> friend ostream &operator<<(ostream&, ElementaryArithmetic<E> &); }; //四则运算 template <class T> void ElementaryArithmetic<T>::Calculate(){ int type; loop1: system("cls"); cout << endl << "*******************" << endl; cout << "* 1.加法运算 *" << endl; cout << "* 2.减法运算 *" << endl; cout << "* 3.乘法运算 *" << endl; cout << "* 4.除法运算 *" << endl; cout << "*******************" << endl << endl; cout << "请输入菜单项(1-4):"; try{ cin >> type; if (type != 1 && type != 2 && type != 3 && type != 4) throw 1; } catch (int e){ cout << endl << "输入错误,请重新输入选项..."; system("pause"); goto loop1; } cout << endl << "请输入两个数字:"; cin >> operand1 >> operand2; if (type == 1){ add(operand1, operand2); operators = '+'; } else if (type == 2){ subtraction(operand1, operand2); operators = '-'; } else if (type == 3){ multiplication(operand1, operand2); operators = '*'; } else if (type == 4){ divide(operand1, operand2); operators = '/'; } } //加法运算 template <class T> void ElementaryArithmetic<T>::add(T operand1,T operand2){ result = operand1 + operand2; } //减法运算 template <class T> void ElementaryArithmetic<T>::subtraction(T operand1, T operand2){ result = operand1 - operand2; } //乘法运算 template <class T> void ElementaryArithmetic<T>::multiplication(T operand1, T operand2){ result = operand1 * operand2; } //除法运算 template <class T> void ElementaryArithmetic<T>::divide(T operand1, T operand2){ try{ //除数为0,出现异常 if ((operand2 - 0) < 1e-8 && (operand2 - 0) > -1e-8) throw 0; } catch (int){ throw ; } result = operand1 / operand2; } //输出运算符重载 template <class E> ostream& operator<<(ostream &os, ElementaryArithmetic<E> &result){ os << endl << "计算结果 : " << result.operand1 << result.operators << result.operand2 << '=' << result.result << endl; return os; } //三角函数 class Trigonometric{ private: double radian; string type; double result; public: //三角函数计算 void Calculate(); //输出运算符重载 friend ostream &operator<<(ostream&, Trigonometric &); }; //三角函数计算 void Trigonometric::Calculate(){ int option; loop2: system("cls"); cout << "*******************" << endl; cout << "* 1.求正弦 *"<< endl; cout << "* 2.求余弦 *"<< endl; cout << "* 3.求正切 *"<< endl; cout << "*******************" << endl << endl; cout << "请输入菜单项(1-3):"; try{ cin >> option; if (option != 1 && option != 2 && option != 3 && option != 4) throw 2; } catch (int e){ cout << endl << "输入错误,请重新输入选项..." ; system("pause"); goto loop2; } cout << endl << "请输入弧度:"; cin >> radian; if (option == 1){ result = sin(radian); type = "sin"; } else if (option == 2){ result = cos(radian); type = "cos"; } else if (option == 3){ result = tan(radian); type = "tan"; } } //输出运算符重载 ostream &operator<<(ostream &os, Trigonometric &result){ os << endl << "计算结果 : " << result.type << "(" << result.radian << ") = " << result.result << endl; return os; } int main(){ int type; loop: while (true){ system("cls"); cout << "*******主菜单**********" << endl; cout << "* *" << endl; cout << "* 1. 四则运算 *" << endl; cout << "* 2. 三角函数 *" << endl; cout << "* 3. 退出程序 *" << endl; cout << "* *" << endl; cout << "***********************" << endl << endl; cout << "请输入菜单项(1-3):"; try{ cin >> type; if (type != 1 && type != 2 && type != 3) throw - 1; if (type == 1){ ElementaryArithmetic<double> calc; calc.Calculate(); cout << calc; } else if (type == 2){ Trigonometric calc; calc.Calculate(); cout << calc; } else if (type == 3) break; } catch (int e){ if (e == -1){ cout << endl << "输入错误,请重新输入选项..."; system("pause"); goto loop; } else if (e == 0) cout << "除数不能为 0 " << endl; } cout << endl; system("pause"); } return 0; }
好吧,其实我也不知道为什么要求用模板和运算符重载,感觉没什么必要,典型的作业代码,不过也可能是我思想的局限性。总之,就这样吧。
相关文章推荐
- c++实现简单计算器
- 【Insert Interval】cpp
- c语言移位操作
- MFC六大关键技术之仿真学习笔记(四)
- c++实现医院检验科排班程序
- 初次接触VC++加载自定义LIB 即静态链接
- 用C++实现打印小九九乘法口诀表
- [c++]复数的运算符重载
- C++的运算符重载(运算符重载如何选定重载的函数类型)--思考1
- C++ 简单实现MFC ListControl 点击列头排序
- 一起talk C栗子吧(第十回:C语言实例--最小公倍数)
- C语言连接MySQL(codeblocks)
- 设计模式C++实现(12)——备忘录模式2
- Java中调用c语言示例
- c++ 备忘录模式(memento)
- VC++ 中ListCtrl经验总结
- 一起talk C栗子吧(第九回:C语言实例--最大公约数)
- Vc++ 控件用法总结之List Control
- C++未明基础知识总结(一)
- C++为什么不叫++C???