Board-Independent Status Indicator

#include <iostream>
using namespace std;

/*
Select exactly ONE hardware board at build time.
*/
// #define BOARD_TYPE_A
#define BOARD_TYPE_B

// Abstract interface used by application code
class StatusIndicator {
public:
    virtual void toggle() = 0;
    virtual bool isOn() const = 0;
    virtual ~StatusIndicator() = default;
};

class BoardAStatusInd :public StatusIndicator {
private:
    int status;
public:
    BoardAStatusInd() : status(0) {}
    void toggle(){
        if(status==0){
            status = 1;
        }
        else{
            status = 0;
        }
    }
    bool isOn() const{
        if(status==1){
            return true;
        }
        else{
            return false;
        }

    }
};

class BoardBStatusInd :public StatusIndicator {
private:
    int status;
public:
    BoardBStatusInd() : status(0) {}
    void toggle(){
        if(status==0){
            status = 1;
        }
        else{
            status = 0;
        }
    }
    bool isOn() const{
        if(status==1){
            return true;
        }
        else{
            return false;
        }

    }
};

/*
TASK FOR LEARNER:

- Create TWO board-specific implementations of StatusIndicator
- Select exactly one using conditional compilation
- Enforce compile-time errors for invalid selections
- Implement the factory function below

DO NOT modify main()
*/
#ifdef BOARD_TYPE_A
BoardAStatusInd IndA;
#else
BoardBStatusInd IndB;
#endif 

StatusIndicator& getStatusIndicator(void){
    #ifdef BOARD_TYPE_A
        return IndA;
    #else
        return IndB;
    #endif
}

// Factory function declaration (not implemented here)
StatusIndicator& getStatusIndicator();

int main() {
    int n;
    cin >> n;

    StatusIndicator& indicator = getStatusIndicator();

    for (int i = 0; i < n; ++i) {
        int evt;
        cin >> evt;

        if (evt == 1) {
            indicator.toggle();
        }

        cout << (indicator.isOn() ? "STATUS=ON\n" : "STATUS=OFF\n");
    }

    return 0;
}

Solving Approach

 

 

 

 

Upvote
Downvote
Loading...

Input

5 1 1 0 1 1

Expected Output

STATUS=ON STATUS=OFF STATUS=OFF STATUS=ON STATUS=OFF