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

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方法决定,调用的函数不同,那么写入文件的格式是不一样的
    在这里插入图片描述

  • 使用StartUML画类图
    在这里插入图片描述
    在这里插入图片描述

  • 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值