c++ - 实现简单的逻辑和延迟模拟器
问题描述
我正在实现一个简单的逻辑和延迟模拟器。为此,我必须创建 2 个类,即节点和导线,它们分别对网表的节点(门、输入和输出)和节点之间的导线进行建模。一个节点对象拥有它的输出线——如果一个节点对象被删除,它也会删除它的所有输出线。一根线连接两个节点,因此分别存储驱动节点和被驱动节点的指针。连线对象不拥有它们连接的节点——它们不需要在销毁时删除节点。为了测试所有这些,我需要实现全加器。
下面是我写的程序。
using namespace std;
class node
{
public:
bool a;
//node();
class wire
{
//Don't know what to declare here
}
};
bool evaluate (bool x, bool y, char o)
{
bool z;
if (o == '&')
z = x & y;
else if (o == '^')
z = x ^ y;
else if (o == '|')
z = x | y;
else
cout << "Error" << endl;
return z;
}
bool evaluate (bool x) //Function overloading
{
bool inv;
inv = !x;
return inv;
}
int main()
{
vector<node> input(3);
vector<node> output(2);
vector<node> intermediate(4);
cout << "Enter a, b and C_in \n";
cin >> input[0].a;
cin >> input[1].a;
cin >> input[2].a;
intermediate[0].a = evaluate(input[0].a, input[1].a, '^');
intermediate[1].a = evaluate (input[2].a, intermediate[0].a, '^');
output[0].a = intermediate[1].a;
intermediate[2].a = evaluate(intermediate[0].a, input[2].a, '&');
intermediate[3].a = evaluate(input[0].a, input[1].a, '&');
output[1].a = evaluate(intermediate[2].a, intermediate[3].a, '|');
cout << "Sum is "<< output[0].a<<endl;
cout << "Carry out is "<< output[1].a << endl;
return 0;
}
目前我能够实现完整的加法器功能,但不使用其他类线。我还需要在我的解决方案中包含其他类。我怎样才能做到这一点?
解决方案
如果我理解正确,您的节点代表存储电力(由布尔值表示)并通过电线连接到其他节点的东西,当两个节点之间的评估完成时,结果应该发送到所有连接的节点。你已经实现了节点,但没有实现连线。
set_a
您可以向修改其状态(布尔值)的类添加一个方法(让我们调用它) node
,以及另一个告诉每条线调用set_a
其连接节点的方法。
更新:另外,您想修改evaluate
以使用节点,而不是布尔值。这样你就有了一个更面向对象的解决方案来解决你的问题。
推荐阅读
- r - 我正在学习 R。我想知道如何用我制作的数据集制作条形图?
- python - 如何根据列名中的单词列表选择列
- php - 使用 while() 或 foreach() 查询显示结果
- reactjs - 在 React Native Flat List 中实现一个计数器
- python - 使用 vscode 从主机调试在 docker 容器中运行的 python 代码
- python - Python中的帖子列表
- python - Python 编写一个 if 语句,从数据框列中提取文本并相应地移动值
- python - 在 keras 层中包装 python 可调用
- javascript - Thymeleaf-Spring-Boot中如何一个接一个地迭代?
- elasticsearch - 如何创建 Elasticsearch 时间点 (PIT)?