CExceptionからクラスを派生する(VC++) VC++のプログラムの中で、例外を投げる方法についてのメモです。CExceptionクラスから自分のクラスを派生して、例外処理を必要とされる時に例外を投げます。VC++では、下記のthrow+try+catch機構を利用して、例外処理を行います。 try 例:「世界のナベアツ」。乱数を発生して、3の倍数の数字が出たら、例外を投げる。 //派生クラスを作成する class CMyException : public CException { public: int m_nError; CMyException(int nError = 3) { #ifdef _DEBUG m_bReadyForDelete = TRUE; #endif m_nError = nError; } void Delete() {delete this;} int ReportError() { CString strText; strText.Format(_T("数字の %d が3に関係あるから、だめ!"), m_nError); AfxMessageBox(strText, MB_OK); return 0; } }; //乱数発生処理 int NumberBut3() { int iNum = rand(); if (iNum % 3 == 0 && iNum != 0) { //3の倍数の時 throw new CMyException(iNum); } return iNum; } void Test() { for (int i = 0; i < 5; i ++) { try { int idat = NumberBut3(); CString strMess; strMess.Format(_T("%d回目の数字は%dで、セーフ!"), i, idat); AfxMessageBox(strMess); } catch (CMyException* e) { e->ReportError(); e->Delete(); break; } } } |