表达式计算器类的设计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的基类用于继承。所以类图就变成这个样子了

clip_image001

 

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() {}
};
posted @ 2015-02-14 23:45  Ljian1992  阅读(667)  评论(1编辑  收藏  举报