Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- QUESTION 2
- #include <iostream>
- using namespace std;
- class ILogic{
- public:
- virtual long Compute(long input1, long input2) = 0;
- };
- class XOR :public ILogic{
- public:
- long Compute(long input1, long input2){
- return input1 ^ input2;
- }
- };
- class NOR :public ILogic{
- public:
- long Compute(long input1, long input2){
- return ~(input1 | input2);
- }
- };
- class NAND :public ILogic{
- public:
- long Compute(long input1, long input2){
- return ~(input1 & input2);
- }
- };
- class Logic{
- ILogic *m_pObject;
- long m_Input1, m_Input2;
- public:
- void SetAttributes(long in1, long in2){
- m_Input1 = in1;
- m_Input2 = in2;
- }
- void SetLogicObject(ILogic *pObject){
- m_pObject = pObject;
- }
- void ComputeLogic(long &result){
- result = m_pObject->Compute(m_Input1, m_Input2);
- }
- };
- // Note: Implement parts (a) & (b) as per the requirements of QUESTION_2.
- int main()
- {
- int type;
- long in1, in2, result;
- ILogic *a = NULL;
- Logic b;
- while(1){
- cout << "Specify a logic operation" << endl << "(0 --> XOR, 1 --> NOR, 2 --> NAND, -1 --> exit): ";
- cin >> type;
- if (type == -1){
- cout << endl << "Program terminated." << endl;
- return 0;
- }
- if (type == 0 || type == 1 || type == 2){
- cout << endl << "Enter two integer logic inputs: ";
- cin >> in1 >> in2;
- if (type == 0){
- a = new XOR;
- b.SetAttributes(in1, in2);
- b.SetLogicObject(a);
- b.ComputeLogic(result);
- }
- else if (type == 1){
- a = new NOR;
- b.SetAttributes(in1, in2);
- b.SetLogicObject(a);
- b.ComputeLogic(result);
- }
- else if (type == 2){
- a = new NAND;
- b.SetAttributes(in1, in2);
- b.SetLogicObject(a);
- b.ComputeLogic(result);
- }
- cout << endl << "Output: " << result << endl << endl;
- }
- else
- cout << endl << "Invalid Input" << endl << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment