首页 > 解决方案 > 实现简单的逻辑和延迟模拟器

问题描述

我正在实现一个简单的逻辑和延迟模拟器。为此,我必须创建 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;
}

目前我能够实现完整的加法器功能,但不使用其他类线。我还需要在我的解决方案中包含其他类。我怎样才能做到这一点?

标签: c++

解决方案


如果我理解正确,您的节点代表存储电力(由布尔值表示)并通过电线连接到其他节点的东西,当两个节点之间的评估完成时,结果应该发送到所有连接的节点。你已经实现了节点,但没有实现连线。

set_a您可以向修改其状态(布尔值)的类添加一个方法(让我们调用它) node,以及另一个告诉每条线调用set_a其连接节点的方法。


更新:另外,您想修改evaluate以使用节点,而不是布尔值。这样你就有了一个更面向对象的解决方案来解决你的问题。


推荐阅读