#include <iostream>
#include <time.h>
using namespace std;
class TlogElement
{
private:
bool Fin1, Fin2;
protected:
bool FRes;
virtual void calc();
bool getIn2()
{
return Fin2;
}
void setIn2(bool newIn2);
public:
bool getIn1(){return Fin1;}
bool getRes(){return FRes;}
void setIn1(bool newIn1);
};
void TlogElement::setIn1(bool newIn1)
{
Fin1=newIn1;
calc();
}
void TlogElement::setIn2(bool newIn2)
{
Fin2=newIn2;
calc();
}
class TNot:public TlogElement
{
protected:
void calc();
};
void TNot::calc()
{
FRes=!getIn1();
}
class TLog2In: public TlogElement
{
public:
using TlogElement::setIn2;
using TlogElement::getIn2;
};
class TAnd : public TLog2In
{
protected:
void calc();
};
void TAnd::calc()
{
FRes=getIn1() && getIn2();
}
class TOr: public TLog2In
{
protected:
void calc();
};
void TOr::calc()
{
FRes=getIn1() || getIn2();
}
int main()
{
//!(a&&b)
TNot elNot;
TAnd elAnd;
int A,B;
cout << "A B !(A&B)" << endl;
cout << "============================================" << endl;
for(A = 0; A<=1;A++)
{
for(B=0; B<=1;B++)
{
elAnd.setIn1(A);
elAnd.setIn2(B);
elNot.setIn1(elAnd.getRes());
cout << " "<<A<<" "<<B<<" "<<elNot.getRes() << endl;
}
}
return 0;
}