表达式计算器类的设计5(面向对象的表达式计算器8)
计算器的github下载地址:https://github.com/ljian1992/calculator
概述
表达式计算器的类基本已经设计完成了,由于在程序运行的时候总会有这样那样的异常,例如:a +2, a没有初始化,对于异常的管理一般而言是需要自定义异常类。这个自定义异常类也是在继承了系统已经定义好的exception类,然后再重新定义内容。
异常的种类
语法异常---->SyntaxError类
赋值时左操作数不是变量:1 = 2;
缺少括号:1 + (2*2
不认识的函数:
函数缺少括号:sin(20
符号表中不存在的符号:
输入一个变量但没有设置它的值:a 回车
不是表达式:)1-2
文件读写异常---->FileStreamError类
文件读异常
文件写异常
除零异常--->DevisorZero类
加载时与存储的版本号不一致--->VersionUnMatch类
现在已经有了需要自定义的异常类,为了方便管理,再设置一个Exception的基类用于继承。所以类图就变成这个样子了
Exception类、SyntaxError类、FileStreamError类、DevisorZero类、VersionUnMatch类的设计
Exception类
class Exception : public std::exception { private: std::string message_; //异常信息 public: explicit Exception(const char* message) //char *类型赋值给string类型,printf(%s)会出问题,而用cout不会 : message_(message) {} explicit Exception(const std::string& message) : message_(message) {} virtual ~Exception() throw() {} virtual const char * what() const throw(); //获取异常信息 };
SyntaxError类
class SyntaxError : public Exception { public: explicit SyntaxError(const char* message) : Exception(message) {} explicit SyntaxError(const std::string& message) : Exception(message) {} virtual ~SyntaxError() throw(){} };
FileStreamError类
class FileStreamError : public Exception { public: explicit FileStreamError(const char* message) : Exception(message) {} explicit FileStreamError(const std::string& message) : Exception(message) {} virtual ~FileStreamError() throw() {} };
DevisorZero类
class DevisorZero : public Exception { public: explicit DevisorZero(const char* message) : Exception(message) {} explicit DevisorZero(const std::string& message) : Exception(message) {} virtual ~DevisorZero() throw() {} };
VersionUnMatch类
class VersionUnMatch : public Exception { public: explicit VersionUnMatch(const char* message) : Exception(message) {} explicit VersionUnMatch(const std::string& message) : Exception(message) {} virtual ~VersionUnMatch() throw() {} };