以下のソースにおいて、メンバ変数grade_が1未満であった場合に、例外を送出し、Formクラスをインスタンス化しないようにしたいのですが、(おそらく)throwをcatchできず、
terminate called after throwing an instance of 'std::runtime_error' what(): Grade Error [1] 780 abort (core dumped) ./a.out
となってしまいます。
どのようにすれば、所望の動作ができるでしょうか。
よろしくお願いいたします。
[Form.hpp]
c++
1#ifndef FORM_HPP 2# define FORM_HPP 3 4# include <iostream> 5# include <string> 6 7class Form 8{ 9public: 10 Form(int grade); 11 virtual ~Form(); 12 int validateGrade(int grade) const; 13private: 14 Form(); 15 const int grade_; 16}; 17 18#endif
[Form.cpp]
c++
1#include "Form.hpp" 2 3Form::Form() : grade_(1) {} 4 5int Form::validateGrade(int grade) const 6{ 7 if (grade < 1) 8 { 9 throw std::runtime_error("Grade Error"); 10 } 11 return (grade); 12} 13 14Form::Form(int grade) 15try 16 : grade_(validateGrade(grade)) 17{ 18 std::cout << "Form Name constructor called" << std::endl; 19} 20catch (...) 21{ 22 std::cout << "Form Name constructor call Failed" << std::endl; 23} 24 25Form::~Form() 26{ 27 std::cout << "Form Destructor called" << std::endl; 28}
[main.cpp]
C++
1#include "Form.hpp" 2 3int main(void) 4{ 5 Form* form001 = new Form(1); 6 delete form001; 7 8 Form* form002 = new Form(0); 9 10 return 0; 11}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/30 07:48
2020/12/30 08:04
2020/12/30 09:27
2020/12/30 11:55