C++ 5日目:変数の定義と初期化

この章から、実際に電卓を実装していきます
まず、共通して使用する変数および関数を定義します

共通で使用する変数の定義

用意する変数は次の通りです

  • current_buffer:文字列、初期値:空文字
  • last_operator: 文字列、初期値:空文字
  • stack[2] : 文字列の配列、初期値:空文字

MyCalculatorDlg.hのCMyCalculatorDlgクラスに、変数の定義を追加します

class CMyCalculatorDlg : public CDialogEx
{
// コンストラクション
public:
    CMyCalculatorDlg(CWnd* pParent = nullptr);  // 標準コンストラクター

// ダイアログ データ
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MYCALCULATOR_DIALOG };
#endif

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート


// 実装
// 以下に追加する --ここから
private:
    CString current_buffer = _T("");
    CString last_operator = _T("");
    CString stack[2] = {_T(""),_T("")};
// -- ここまで

protected:
    HICON m_hIcon;

    // 生成された、メッセージ割り当て関数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:

OnInitDialogについて

MyCalculateDlg.cppにはBOOL CMyCalculatorDlg::OnInitDialog()という関数が定義されています
OnInitDialog はダイアログの初期化処理を行うメソッドです
このメソッド内で、ダイアログボックスに表示されるコントロールの初期状態を設定したり、メンバ変数の値を初期化したりします
例えば、編集ボックスに初期値を設定する、チェックボックスをオンにするなどが可能です

既存の処理以外に、何か初期処理を実行したい場合、
// TODO: 初期化をここに追加します。と記載されている行の下へ追加します

BOOL CMyCalculatorDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // "バージョン情報..." メニューをシステム メニューに追加します。

    // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu !nullptr)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
    //  Framework は、この設定を自動的に行います。
    SetIcon(m_hIcon, TRUE);         // 大きいアイコンの設定
    SetIcon(m_hIcon, FALSE);        // 小さいアイコンの設定

    // TODO: 初期化をここに追加します。

    return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}

たとえば、先に定義した変数を初期化する関数initVariableを定義し、その関数をOnInitDialogから呼び出すときは以下のように記述します

  1. MyCalculatorDlg.h

MyCalculatorDlg.hにvoid initVariable()を定義します

class CMyCalculatorDlg : public CDialogEx
{
// コンストラクション
public:
    CMyCalculatorDlg(CWnd* pParent = nullptr);  // 標準コンストラクター

// ダイアログ データ
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MYCALCULATOR_DIALOG };
#endif

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート


// 実装
private:
    void initVariable(); // 初期化用関数を定義

    CString current_buffer = _T("");
    CString last_operator = _T("");
    CString stack[2] = {_T(""),_T("")};

protected:
    HICON m_hIcon;

    // 生成された、メッセージ割り当て関数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
};
  1. MyCalculatorDlg.cppの中に実体の関数を記述します
// 変数の初期化
void CMyCalculatorDlg::initVariable()
{
    clearCurrentBuffer();
    last_operator = "";
    stack[0] = "";
    stack[1] = "";
}
  1. MyCalculatorDlg.cppのOnInitDialog()内からinitVariable()を呼び出します

// TODO: 初期化をここに追加します。の下に呼び出す関数を記述します
// TODO: 初期化をここに追加します。この記述より上は、自動で生成された部分ですので、変更や削除は控えましょう

BOOL CMyCalculatorDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // "バージョン情報..." メニューをシステム メニューに追加します。

    // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu !nullptr)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
    //  Framework は、この設定を自動的に行います。
    SetIcon(m_hIcon, TRUE);         // 大きいアイコンの設定
    SetIcon(m_hIcon, FALSE);        // 小さいアイコンの設定

    // TODO: 初期化をここに追加します。
    initVariable(); // 初期化関数を呼び出す

    return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}

変数の定義が終わりましたので、次回はACボタンの実装に入ります

コメント

この記事へのコメントはありません。

関連記事

C++ 9日目:演算子の入力

C++ 8日目:小数点の入力

Python 応用編 3日目

PAGE TOP