Language: C++

#include <cstdio>
#include <crtdbg.h>

using namespace std;

namespace _ITP1_2_A
{
/**
* @brief 大小関係を管理する
*/
class RelationshipBase
{
public:
    /**
    * @brief デストラクタ
    */
    virtual ~RelationshipBase() {}

public:
    /**
    * @fn void printAnswer(int a, int b)
    * @brief 大小関係を出力する
    * @param[in] a 比較対象
    * @param[in] b 比較対象
    */
    virtual void printAnswer(int a, int b) = 0;
};

class RelationshipGreaterThan final : virtual public RelationshipBase
{
public:
    /**
    * @fn void printAnswer(int a, int b)
    * @brief 大小関係を出力する
    * @param[in] a 比較対象
    * @param[in] b 比較対象
    */
    void printAnswer(int a, int b);
};

class RelationshipLessThan final : virtual public RelationshipBase
{
public:
    /**
    * @fn void printAnswer(int a, int b)
    * @brief 大小関係を出力する
    * @param[in] a 比較対象
    * @param[in] b 比較対象
    */
    void printAnswer(int a, int b);
};

class RelationshipEqual final : virtual public RelationshipBase
{
public:
    /**
    * @fn void printAnswer(int a, int b)
    * @brief 大小関係を出力する
    * @param[in] a 比較対象
    * @param[in] b 比較対象
    */
    void printAnswer(int a, int b);
};

class ITP1_2_A
{
private:
    RelationshipBase* relationship;

public:
    /**
    * @brief コンストラクタ
    */
    ITP1_2_A() : relationship(NULL) {}

    /**
    * @brief デストラクタ
    */
    ~ITP1_2_A() { delete relationship; }

public:
    /**
    * @fn bool execute();
    * @brief ２つの整数を読み込み、その大小関係を出力する
    * @return bool 入力範囲内ならtrueを、そうでなければfalseを返す
    */
    bool execute();

private:
    /**
    * @fn void read()
    * @brief 標準入力から読み込む
    * @param[out] a 入力データ
    * @param[out] b 入力データ
    */
    void read(int& a, int& b);

    /**
    * @fn bool check(int a, int b)
    * @brief 入力範囲チェックを行う
    * @param[in] a 入力データ
    * @param[in] b 入力データ
    * @return bool 入力範囲内ならtrueを、そうでなければfalseを返す
    */
    bool check(int a, int b);

    /**
    * @fn RelationshipBase* createRelationship(int a, int b)
    * @brief 比較オブジェクトを生成する
    * @param[in] a 比較対象
    * @param[in] b 比較対象
    */
    void createRelationship(int a, int b);
};
}

using namespace _ITP1_2_A;

bool ITP1_2_A::execute()
{
    int in_a = 0, in_b = 0;

    read(in_a, in_b);

    if (!check(in_a, in_b))
        return false;

    createRelationship(in_a, in_b);

    relationship->printAnswer(in_a, in_b);

    return true;
}

void ITP1_2_A::read(int& a, int& b)
{
    scanf("%d %d", &a, &b);
}

bool ITP1_2_A::check(int a, int b)
{
    if (-1000 > a || 1000 < a ||
        -1000 > b || 1000 < b)
        return false;

    return true;
}

void ITP1_2_A::createRelationship(int a, int b)
{
    int diff = a - b;

    if (0 == diff)
        relationship = new RelationshipEqual;
    else if (0 < diff)
        relationship = new RelationshipGreaterThan;
    else
        relationship = new RelationshipLessThan;

}

void RelationshipGreaterThan::printAnswer(int a, int b)
{
    printf("%s\n", "a > b");
}

void RelationshipLessThan::printAnswer(int a, int b)
{
    printf("%s\n", "a < b");
}

void RelationshipEqual::printAnswer(int a, int b)
{
    printf("%s\n", "a == b");
}

/**
* @fn int main()
* @brief エントリーポイント
*/
int main()
{
    // メモリリーク検出
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

    if (ITP1_2_A().execute())
        return 1;
}



Compiler output:
a.cc:2:10: fatal error: crtdbg.h: No such file or directory
    2 | #include <crtdbg.h>
      |          ^~~~~~~~~~
compilation terminated.