表达式计算器类的设计4(面向对象的表达式计算器7)
計算器的github下載地址:https://github.com/ljian1992/calculator
概述
把符號表和變量表中的內(nèi)容保存到一個文件中,通過IO文件流,來把符號表和變量表存儲到文件中。在這之前需要弄明白什么是序列化和反序列化
對象的序列化
序列化:把對象轉(zhuǎn)換為字節(jié)序列的過程
反序列化:把字節(jié)序列恢復為對象的過程
我們要把SymbolTable類的對象(符號表)和Storage類的對象(變量表)轉(zhuǎn)換成字節(jié)序列保存到文件中,這時就可以設置Serializer類來完成這樣的功能,同樣的設置一個DeSerializer類來完成把保存到文件當中的字節(jié)序列恢復為對象的功能。這里要注意的是,所有的復雜類型都是由內(nèi)置類型組合而成的,因此不是為某一個類設置專門一個序列化類,而是設置一個序列化的基類,這個類可以把相關的數(shù)據(jù)類型轉(zhuǎn)換成字節(jié)序列存入文件中,再通過這樣的一個基類,去把某一個類的對象的內(nèi)容存儲到文件中。
在表達式計算器中,有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; };轉(zhuǎn)載于:https://www.cnblogs.com/Ljian1992/p/4292299.html
總結
以上是生活随笔為你收集整理的表达式计算器类的设计4(面向对象的表达式计算器7)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell 编程基础之 Case 练习
- 下一篇: curl和file_get_conten