最近老师要求写一个表达式计算器,讲了算法,看上去容易,但是写起来还是有很多地方要注意呀。
-类设计
-unit类--用于存储后缀表达式
unit类我自己感觉设计得不好。设计这个类的主要目的是为了往后缀表达式中存储数据。
后缀表达式中既有数,也有符号,我想不出什么方法可以把这两种数据类型放在一起,于是设计了这个畸形的类……
class unit {
bool is_number;//判断该unit是否是一个数
double true_number=0;//存储数
char true_operator='$';//存储符号。
int priority=5;//存储符号的优先级
int inv=5;//存储符号的目数
public:
unit(const double &true_number_fake);//作为数的构造函数
unit(const char &true_operator_fake);//作为符号的构造函数
~unit() {};
unit& operator=(const unit &A);
char read_operator();//读取符号
double read_number();//读取数
int read_priority();//读取优先级
int read_inv();//读取目数
bool read_is();//判断是否是一个数
int cal_priority();//计算优先级
int cal_inv();//计算目数
void show();//若为一个数,输出true_number,若为一个符号,输出true_operator
};
-caculator类--用于计算
另外设计了一个caculator类用于计算。
class caculator {
string Expression;//中缀表达式
queue<unit> reverse_polish_notation;//后缀表达式
stack<unit> operators;//运算符栈
public:
caculator() {};
~caculator() {};
void input_expression();//输入中缀表达式
double cal_reverse_polish_notation();//计算后置表达式的值
void switch_nega