0
点赞
收藏
分享

微信扫一扫

(P67)面向对象版表达式计算器:实现命令,序列化


文章目录

  • ​​1.实现命令​​
  • ​​2.序列化​​

1.实现命令

  • !s filename
    保存文件的时候,需要保存符号表的信息,变量表的信息(符号表中包含了函数名和变量名信息,变量表中包含了变量名的值)。
    所以,SymbolTable类, Storage类是可序列化的类,可以保存到文件中,也可以把它加载到相应的对象中。Calc类也应该是可序列化的类,因为Calc类包含了SymbolTable类, Storage类。所以在序列化时,只需要调用Calc类的序列化,然后再调用SymbolTable类, Storage类的序列化。
  • !l filename

2.序列化

  • Serializer和DeSerializer类:对文件操作的基础类
  • SymbolTable类序列化
  • Storage类序列化
  • Calc类序列化
  • 可序列化的类,能够将类对象保存到文件中(叫做序列化),也能从文件中加载数据还原对象(叫做反序列化)
    序列化相关的类关系如下:
    Serializer和DeSerializer类是基础类;
    SymbolTable类,Storage类,Calc类都是可序列化的类,都继承至Serializable类;
    Serializable类又依赖于Serializer和DeSerializer类(依赖关系具有使用的语义),在读写文件的时候,使用这俩基础类来读写文件;
    eg:Storage类使用Serializer基础类来保存数据,写入的格式方法由Serializable类中的Serialize方法决定,该函数是虚函数,Storage类会覆盖这个方法,提供这个方法的实现,决定数据该如何写入到文件中,但是使用的是Serializer基础类来写文件。按照什么样的格式写入数据,是由Serialize方法方法提供的,该方法会调用Serializer基础类的相关接口来写文件,调用接口的顺序由Serialize方法决定,调用的函数不同,那么写入文件的格式是不一样的
  • (P67)面向对象版表达式计算器:实现命令,序列化_数据结构

  • 使用StartUML画类图
  • (P67)面向对象版表达式计算器:实现命令,序列化_c语言_02


  • (P67)面向对象版表达式计算器:实现命令,序列化_c语言_03

  • eg:
    P67\Calculator\Serial.h,P67\Calculator\Serial.cpp

class Serializable
{
public:
virtual void Serialize(Serializer& out) const = 0;
virtual void DeSerialize(DeSerializer& in) = 0;
};

P67\Calculator\SymbolTable.h,P67\Calculator\SymbolTable.cpp
P67\Calculator\Storage.h,P67\Calculator\Storage.cpp
P67\Calculator\Calc.h,P67\Calculator\Calc.cpp

void Serialize(Serializer& out) const;
void DeSerialize(DeSerializer& in);

  • 测试:
    当前的变量表

    符号表

    保存文件

    关闭程序后,重新加载变量表



举报

相关推荐

线性栈实现中缀表达式计算器

0 条评论