0

を使った関数がありますtry-catch。だから私は別のクラスを使用して、さまざまな種類のメッセージを出力したいと考えています。私は何をすべきか?

名前空間を使用しますstd。私はこれが初めてで、 namespace の使用に慣れていませんstd。よろしくお願いします。

SparseException::SparseException ()
{ }

SparseException::SparseException (char *message)
{ }

void SparseException::printMessage () const
{ 
   // ... 
}

try
{
    //did some stuffs here.
}
catch (exception e)
{
    char *message = "Sparse Exception caught: Element not found, delete fail";
    SparseException s (message);
    s.printMessage();
}
4

2 に答える 2

3

から例外クラスを派生させ、std::exceptionをオーバーライドしますwhat()。関数を削除してprintMessage実装(オーバーライド)します。

virtual const char* what() const throw();

C ++ 11では、この関数には次のシグネチャがあります。

virtual const char* what() const noexcept;

次に、catch句と例外の理由の出力は次のようになります。

catch (const std::exception& e)
{
  std::cerr << "exception caught: " << e.what() << '\n';
}
于 2013-02-15T13:12:47.577 に答える
0

または、例外のみをスローする場合は、次のようにするだけです。

SparseException::SparseException ()
{ }

SparseException::SparseException (char *message)
{ }

void SparseException::printMessage () const
{ 
   // ... 
}

try
{
    //did some stuffs here.
    //Possibly
    //throw SparseException();
    //or
    //throw SparseException("Some string");
    //Make sure you can throw only objects of SparseException type
}
catch (SparseException e)
{
    e.printMessage();
}

throw を含む行が実行されると、try ブロックの結果が終了し、catch ブロックが実行されます。ここで、e はスローしたオブジェクトです。

于 2013-03-11T19:52:37.283 に答える