日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

表达式计算器类的设计4(面向对象的表达式计算器7)

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 表达式计算器类的设计4(面向对象的表达式计算器7) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算器的github下載地址:https://github.com/ljian1992/calculator

概述

把符號表和變量表中的內容保存到一個文件中,通過IO文件流,來把符號表和變量表存儲到文件中。在這之前需要弄明白什么是序列化和反序列化

對象的序列化

序列化:把對象轉換為字節序列的過程

反序列化:把字節序列恢復為對象的過程

我們要把SymbolTable類的對象(符號表)和Storage類的對象(變量表)轉換成字節序列保存到文件中,這時就可以設置Serializer類來完成這樣的功能,同樣的設置一個DeSerializer類來完成把保存到文件當中的字節序列恢復為對象的功能。這里要注意的是,所有的復雜類型都是由內置類型組合而成的,因此不是為某一個類設置專門一個序列化類,而是設置一個序列化的基類,這個類可以把相關的數據類型轉換成字節序列存入文件中,再通過這樣的一個基類,去把某一個類的對象的內容存儲到文件中。

在表達式計算器中,有20多個個類,僅僅是SymbolTable類的對象和Storage類的對象需要保存or加載的,有的類可以有這功能,有的類可以沒有這個功能。這樣的話,可以定義一個”接口類“來表達這一功能,有的這個功能的就繼承,沒有就不繼承,當然C++里頭沒接口的概念,不過我們可以用抽象類來模擬這樣的功能。這個抽象類就定義為Serializable類。

相關類之間的關系

注意:由于Storage類和SymboTable類是由Calc類管理的,故Calc類也需要繼承Serializable類

?

Serializer類,DeSerializer類,Serializable類的設計

Serializer類

class Serializer { private:std::ofstream stream_; public:Serializer(const std::string& fileName);Serializer& Put(int x);Serializer& Put(unsigned int x);Serializer& Put(long x);Serializer& Put(unsigned long x);Serializer& Put(double x);Serializer& Put(const std::string& x);Serializer& Put(bool x);?? Serializer& operator<< (int x);Serializer& operator<< (unsigned int x);Serializer& operator<< (long x);Serializer& operator<< (unsigned long x);Serializer& operator<< (double x);Serializer& operator<< (const std::string& x);Serializer& operator<< (bool x); };?

?

DeSerializer類

class DeSerializer { private:std::ifstream stream_; public:DeSerializer(const std::string& fileName);DeSerializer& Get(int& x);DeSerializer& Get(unsigned int& x);DeSerializer& Get(long& x);DeSerializer& Get(unsigned long& x);DeSerializer& Get (double& x);DeSerializer& Get(std::string& x);DeSerializer& Get(bool& x);?? DeSerializer& operator>> (int& x);DeSerializer& operator>> (unsigned int& x);DeSerializer& operator>> (long& x);DeSerializer& operator>> (unsigned long& x);DeSerializer& operator>> (double& x);DeSerializer& operator>> (std::string& x);DeSerializer& operator>> (bool& x); };

?

Serializable類

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

轉載于:https://www.cnblogs.com/Ljian1992/p/4292299.html

總結

以上是生活随笔為你收集整理的表达式计算器类的设计4(面向对象的表达式计算器7)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。