试着抓住,2节课

时间:2013-02-15 13:10:46

标签: c++

我有一个使用try-catch的功能。所以我想使用和另一个类打印出不同类型的消息。我该怎么办?

我使用命名空间std。我不熟悉使用名称空间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();
}

2 个答案:

答案 0 :(得分: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';
}

答案 1 :(得分: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是你抛出的对象。