帮一个同学写的,非计算机类专业,应付交差,也没什么功能,两个数的加减乘除运算,以及三角函数的运算。要求用到模板、运算符重载和异常处理。
一直以来都是用的java,没怎么用过c++,就当是复习了一下c++语法。
代码如下:
1 #include<iostream>
2 #include<string>
3 #include<cmath>
4 #include<cstdlib>
5
6 using namespace std;
7
8 //四则运算
9 template <class T> class ElementaryArithmetic{
10 private:
11 T result;
12 T operand1, operand2;
13 char operators;
14 public:
15 //四则运算
16 void Calculate();
17 //加法运算
18 void add(T, T);
19 //减法运算
20 void subtraction(T, T);
21 //乘法运算
22 void multiplication(T, T);
23 //除法运算
24 void divide(T, T);
25 //输出运算符重载
26 template <class E> friend ostream &operator<<(ostream&, ElementaryArithmetic<E> &);
27 };
28
29 //四则运算
30 template <class T> void ElementaryArithmetic<T>::Calculate(){
31 int type;
32
33 loop1:
34 system("cls");
35 cout << endl << "*******************" << endl;
36 cout << "* 1.加法运算 *" << endl;
37 cout << "* 2.减法运算 *" << endl;
38 cout << "* 3.乘法运算 *" << endl;
39 cout << "* 4.除法运算 *" << endl;
40 cout << "*******************" << endl << endl;
41 cout << "请输入菜单项(1-4):";
42 try{
43 cin >> type;
44 if (type != 1 && type != 2 && type != 3 && type != 4)
45 throw 1;
46 }
47 catch (int e){
48 cout << endl << "输入错误,请重新输入选项...";
49 system("pause");
50 goto loop1;
51 }
52
53 cout << endl << "请输入两个数字:";
54 cin >> operand1 >> operand2;
55 if (type == 1){
56 add(operand1, operand2);
57 operators = '+';
58 }
59 else if (type == 2){
60 subtraction(operand1, operand2);
61 operators = '-';
62 }
63 else if (type == 3){
64 multiplication(operand1, operand2);
65 operators = '*';
66 }
67 else if (type == 4){
68 divide(operand1, operand2);
69 operators = '/';
70 }
71
72 }
73
74 //加法运算
75 template <class T> void ElementaryArithmetic<T>::add(T operand1,T operand2){
76 result = operand1 + operand2;
77 }
78
79 //减法运算
80 template <class T> void ElementaryArithmetic<T>::subtraction(T operand1, T operand2){
81 result = operand1 - operand2;
82 }
83
84 //乘法运算
85 template <class T> void ElementaryArithmetic<T>::multiplication(T operand1, T operand2){
86 result = operand1 * operand2;
87 }
88
89 //除法运算
90 template <class T> void ElementaryArithmetic<T>::divide(T operand1, T operand2){
91 try{
92 //除数为0,出现异常
93 if ((operand2 - 0) < 1e-8 && (operand2 - 0) > -1e-8)
94 throw 0;
95 }
96 catch (int){
97 throw ;
98 }
99 result = operand1 / operand2;
100 }
101
102 //输出运算符重载
103 template <class E> ostream& operator<<(ostream &os, ElementaryArithmetic<E> &result){
104 os << endl << "计算结果 : " << result.operand1 << result.operators << result.operand2 << '=' << result.result << endl;
105 return os;
106 }
107
108 //三角函数
109 class Trigonometric{
110 private:
111 double radian;
112 string type;
113 double result;
114 public:
115 //三角函数计算
116 void Calculate();
117 //输出运算符重载
118 friend ostream &operator<<(ostream&, Trigonometric &);
119 };
120
121 //三角函数计算
122 void Trigonometric::Calculate(){
123 int option;
124
125 loop2:
126 system("cls");
127 cout << "*******************" << endl;
128 cout << "* 1.求正弦 *"<< endl;
129 cout << "* 2.求余弦 *"<< endl;
130 cout << "* 3.求正切 *"<< endl;
131 cout << "*******************" << endl << endl;
132 cout << "请输入菜单项(1-3):";
133 try{
134 cin >> option;
135 if (option != 1 && option != 2 && option != 3 && option != 4)
136 throw 2;
137 }
138 catch (int e){
139 cout << endl << "输入错误,请重新输入选项..." ;
140 system("pause");
141 goto loop2;
142 }
143
144
145 cout << endl << "请输入弧度:";
146 cin >> radian;
147
148 if (option == 1){
149 result = sin(radian);
150 type = "sin";
151 }
152 else if (option == 2){
153 result = cos(radian);
154 type = "cos";
155 }
156 else if (option == 3){
157 result = tan(radian);
158 type = "tan";
159 }
160 }
161
162 //输出运算符重载
163 ostream &operator<<(ostream &os, Trigonometric &result){
164 os << endl << "计算结果 : " << result.type << "(" << result.radian << ") = " << result.result << endl;
165 return os;
166 }
167
168 int main(){
169 int type;
170
171 loop:
172 while (true){
173 system("cls");
174 cout << "*******主菜单**********" << endl;
175 cout << "* *" << endl;
176 cout << "* 1. 四则运算 *" << endl;
177 cout << "* 2. 三角函数 *" << endl;
178 cout << "* 3. 退出程序 *" << endl;
179 cout << "* *" << endl;
180 cout << "***********************" << endl << endl;
181 cout << "请输入菜单项(1-3):";
182
183 try{
184 cin >> type;
185 if (type != 1 && type != 2 && type != 3)
186 throw - 1;
187
188 if (type == 1){
189 ElementaryArithmetic<double> calc;
190 calc.Calculate();
191 cout << calc;
192 }
193 else if (type == 2){
194 Trigonometric calc;
195 calc.Calculate();
196 cout << calc;
197 }
198 else if (type == 3)
199 break;
200 }
201 catch (int e){
202 if (e == -1){
203 cout << endl << "输入错误,请重新输入选项...";
204 system("pause");
205 goto loop;
206 }
207 else if (e == 0)
208 cout << "除数不能为 0 " << endl;
209
210 }
211 cout << endl;
212 system("pause");
213 }
214 return 0;
215 }
好吧,其实我也不知道为什么要求用模板和运算符重载,感觉没什么必要,典型的作业代码,不过也可能是我思想的局限性。总之,就这样吧。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有