我是使用C ++自学的,并且我一直在开发控制软件 这种编程语言。我的设计还包含一个C ++ 用两个输入对AND门建模的类。在某些时候,我发现具有两个以上输入(最多八个输入)的AND门就可以了。我的问题是如何最好地实现这一目标 C ++中的方式?
我一直在考虑类模板。是好主意还是使用合成,即AND_03由两个AND_02门组成?
class AND_02 : public Logic_FB{
private:
public:
void AND_02(uint32_t result, uint32_t input_01, uint32_t input_02);
void update(void);
}
其中
class Logic_FB{
virtual void update(void) = 0;
}
是其他逻辑元素(如“或”门,RS触发器等)的统一接口。
答案 0 :(得分:1)
我可以建议使用默认参数
class AND_02
{
public:
AND_02(bool x0, bool x1, bool x2 = true, bool x3 = true)
: x0{x0}, x1{x1}, x2{x2}, x3{x3}
{
}
bool result()
{
return x0 && x1 && x2 && x3;
}
private:
bool x0{false};
bool x1{false};
bool x2{false};
bool x3{false};
void update(void)
{
//do something
}
};
您可以像使用它
AND_02 andGateXY(false, true);
AND_02 andGateXY2(true, true);
std::cout << "Result: " << andGateXY.result();
std::cout << "Result2: " << andGateXY2.result();
if(andGateXY.result() && andGateXY2.result())
{
}
std::cout << "Result2: " << (andGateXY.result() && andGateXY2.result());
答案 1 :(得分:0)
一个简单的解决方案是创建一个具有8个默认输入的类。对于AND,将可选输入设置为true
,对于OR,将可选输入设置为false
,将导致未使用的输入对结果没有影响。
例如:
class AND
{
public:
AND( bool x0 = false, bool x1 = false, // Required inputs
bool x2 = true, bool x3 = true, // Optional inputs
bool x4 = true, bool x5 = true,
bool x6 = true, bool x7 = true )
{
input( x0, x1, x2, x3, x4, x5, x7, x7 ) ;
}
bool output()
{
return m_x0 && m_x1 && m_x2 && m_x3 &&
m_x4 && m_x5 && m_x6 && m_x5 ;
}
bool input( bool x0, bool x1, // Required inputs
bool x2 = true, bool x3 = true, // Optional inputs
bool x4 = true, bool x5 = true,
bool x6 = true, bool x7 = true )
{
m_x0 = x0 ;
m_x1 = x1 ;
m_x2 = x2 ;
m_x3 = x3 ;
m_x4 = x4 ;
m_x5 = x5 ;
m_x6 = x6 ;
m_x7 = x7 ;
return output() ;
}
private:
bool m_x0, m_x1, m_x2, m_x3,
m_x4, m_x5, m_x6, m_x7 ;
} ;
用法示例:
AND z;
bool out = z.input( a, b, c ) ; // three input gate
AND z;
bool out = z.input( a, b, c, e, f, g ) ; // six input gate
AND z( a,b,c,d ) ; // Four inputs
bool out = x.output() ;