表达式计算器类的设计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() {}

};

你可能感兴趣的:(面向对象)