面向对象版计算器(七)

 Storage类用于存储一些变量与常量的值:


Storage与SymbolTable是依赖关系  只是用到了它

Storage类实现:

storage.h:
#ifndef _STORAGE_H_
#define _STORAGE_H_

#include <vector>

class SymbolTable;

class Storage
{
public:
	Storage(SymbolTable& tbl);
	void Clear();
	bool IsInit(unsigned int id) const;
	void AddConstants(SymbolTable& tbl);
	double GetValue(unsigned int id) const;
	void SetValue(unsigned int id, double val);
	void AddValue(unsigned int id, double val);

private:
	std::vector<double> cells_;
	std::vector<bool> inits_;
};

#endif // _STORAGE_H_

storage.cpp:
#include "Storage.h"
#include "SymbolTable.h"
#include <cmath>
#include <cassert>

Storage::Storage(SymbolTable& tbl)
{
	AddConstants(tbl);
}

void Storage::Clear()
{
	cells_.clear();
	inits_.clear();
}

bool Storage::IsInit(unsigned int id) const
{
	return id < cells_.size() && inits_[id];
}

void Storage::AddConstants(SymbolTable& tbl)
{
	unsigned int id = tbl.Add("e");
	AddValue(id, exp(1.0));

	id = tbl.Add("pi");
	AddValue(id, 2.0*acos(0.0));	//反余弦 pi = 2*acos(0)
}

double Storage::GetValue(unsigned int id) const
{
	assert (id < cells_.size());
	return cells_[id];
}

void Storage::SetValue(unsigned int id, double val)
{
	assert(id <= cells_.size());
	if (id < cells_.size())
	{
		cells_[id] = val;
		inits_[id] = true; 
	}
	else if (id == cells_.size())
	{
		AddValue(id, val);
	}
}

void Storage::AddValue(unsigned int id, double val)
{
	cells_.resize(id+1);
	inits_.resize(id+1);
	cells_[id] = val;
	inits_[id] = true;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值