A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FExceptions%2FCustom_Exception</id>
		<title>C++ Tutorial/Exceptions/Custom Exception - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B_Tutorial%2FExceptions%2FCustom_Exception"/>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Exceptions/Custom_Exception&amp;action=history"/>
		<updated>2026-04-11T05:16:12Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Exceptions/Custom_Exception&amp;diff=2801&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Exceptions/Custom_Exception&amp;diff=2801&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Exceptions/Custom_Exception&amp;diff=2802&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B_Tutorial/Exceptions/Custom_Exception&amp;diff=2802&amp;oldid=prev"/>
				<updated>2010-05-25T10:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Custom exception class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
class Exception {&lt;br /&gt;
public:&lt;br /&gt;
   Exception(const string&amp;amp; msg) : msg_(msg) {}&lt;br /&gt;
  ~Exception( ) {}&lt;br /&gt;
   string getMessage( ) const {return(msg_);}&lt;br /&gt;
private:&lt;br /&gt;
   string msg_;&lt;br /&gt;
};&lt;br /&gt;
void f( ) {&lt;br /&gt;
   throw(Exception(&amp;quot;Mr. Sulu&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
int main( ) {&lt;br /&gt;
   try {&lt;br /&gt;
      f( );&lt;br /&gt;
   }&lt;br /&gt;
   catch(Exception&amp;amp; e) {&lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;You threw an exception: &amp;quot; &amp;lt;&amp;lt; e.getMessage( ) &amp;lt;&amp;lt; endl;&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;You threw an exception: Mr. Sulu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Throw a custom exception object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using std::cout;&lt;br /&gt;
using std::endl;&lt;br /&gt;
class Trouble {&lt;br /&gt;
  public:&lt;br /&gt;
    Trouble(const char* pStr = &amp;quot;There&amp;quot;s a problem&amp;quot;) : pMessage(pStr) {}&lt;br /&gt;
    const char* what() const {return pMessage;}&lt;br /&gt;
  private:&lt;br /&gt;
    const char* pMessage;&lt;br /&gt;
};&lt;br /&gt;
int main() {&lt;br /&gt;
  for(int i = 0 ; i &amp;lt; 2 ; i++) {&lt;br /&gt;
    try     {&lt;br /&gt;
      if(i == 0)&lt;br /&gt;
        throw Trouble();&lt;br /&gt;
      else&lt;br /&gt;
        throw Trouble(&amp;quot;Nobody knows the trouble I&amp;quot;ve seen...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    catch(const Trouble&amp;amp; t) {&lt;br /&gt;
      cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;Exception: &amp;quot; &amp;lt;&amp;lt; t.what();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Exception: There&amp;quot;s a problem&lt;br /&gt;
Exception: Nobody knows the trouble I&amp;quot;ve seen...&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Throw your own exception class based on runtime_error==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;stdexcept&amp;gt;&lt;br /&gt;
using std::cin;&lt;br /&gt;
using std::cout;&lt;br /&gt;
using std::endl;&lt;br /&gt;
using std::runtime_error;&lt;br /&gt;
class DivideByZeroException : public runtime_error&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   DivideByZeroException::DivideByZeroException(): runtime_error( &amp;quot;attempted to&lt;br /&gt;
 divide by zero&amp;quot; ) {}&lt;br /&gt;
};&lt;br /&gt;
double quotient( int numerator, int denominator )&lt;br /&gt;
{&lt;br /&gt;
   throw DivideByZeroException(); // terminate function&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
       double result = quotient( 1, 1 );&lt;br /&gt;
       cout &amp;lt;&amp;lt; &amp;quot;The quotient is: &amp;quot; &amp;lt;&amp;lt; result &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
    catch ( DivideByZeroException &amp;amp;divideByZeroException )&lt;br /&gt;
    {&lt;br /&gt;
       cout &amp;lt;&amp;lt; &amp;quot;Exception occurred: &amp;quot; &amp;lt;&amp;lt; divideByZeroException.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Exception occurred: attempted to divide by zero&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use custom exception in your own Array class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const int DefaultSize = 10;&lt;br /&gt;
 &lt;br /&gt;
 // define the exception classes&lt;br /&gt;
 class ArrayIndexOutofBoundException {};&lt;br /&gt;
 &lt;br /&gt;
 class BaseArraySizeException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     BaseArraySizeException(int size):itsSize(size) {}&lt;br /&gt;
     ~BaseArraySizeException(){}&lt;br /&gt;
     virtual int GetSize() { return itsSize; }&lt;br /&gt;
     virtual void PrintError() &lt;br /&gt;
     { std::cout &amp;lt;&amp;lt; &amp;quot;Size error. Received: &amp;quot; &lt;br /&gt;
         &amp;lt;&amp;lt; itsSize &amp;lt;&amp;lt; std::endl; }&lt;br /&gt;
 protected:&lt;br /&gt;
     int itsSize;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ArraySizeTooBigException : public BaseArraySizeException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     ArraySizeTooBigException(int size):BaseArraySizeException(size){}&lt;br /&gt;
     virtual void PrintError() &lt;br /&gt;
     { &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Too big! Received: &amp;quot;;&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; BaseArraySizeException::itsSize &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ArraySizeTooSmallException : public BaseArraySizeException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     ArraySizeTooSmallException(int size):BaseArraySizeException(size){}&lt;br /&gt;
     virtual void PrintError() &lt;br /&gt;
     { &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Too small! Received: &amp;quot;;&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; BaseArraySizeException::itsSize &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ArraySizeZeroException  : public ArraySizeTooSmallException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     ArraySizeZeroException(int size):ArraySizeTooSmallException(size){}&lt;br /&gt;
     virtual void PrintError() &lt;br /&gt;
     { &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Zero!!. Received: &amp;quot;;&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; BaseArraySizeException::itsSize &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ArraySizeNegativeException : public BaseArraySizeException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     ArraySizeNegativeException(int size):BaseArraySizeException(size){}&lt;br /&gt;
     virtual void PrintError() &lt;br /&gt;
     { &lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Negative! Received: &amp;quot;;&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; BaseArraySizeException::itsSize &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Array&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     // constructors&lt;br /&gt;
     Array(int itsSize = DefaultSize);&lt;br /&gt;
     Array(const Array &amp;amp;rhs);&lt;br /&gt;
     ~Array() { delete [] pType;}&lt;br /&gt;
 &lt;br /&gt;
     // operators&lt;br /&gt;
     Array&amp;amp; operator=(const Array&amp;amp;);&lt;br /&gt;
     int&amp;amp; operator[](int offSet);&lt;br /&gt;
     const int&amp;amp; operator[](int offSet) const;&lt;br /&gt;
 &lt;br /&gt;
     // accessors&lt;br /&gt;
     int GetitsSize() const { return itsSize; }&lt;br /&gt;
 &lt;br /&gt;
     // friend function&lt;br /&gt;
     friend std::ostream&amp;amp; operator&amp;lt;&amp;lt; (std::ostream&amp;amp;, const Array&amp;amp;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
     int *pType;&lt;br /&gt;
     int  itsSize;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Array::Array(int size):&lt;br /&gt;
 itsSize(size)&lt;br /&gt;
 {&lt;br /&gt;
     if (size == 0)&lt;br /&gt;
         throw ArraySizeZeroException(size);&lt;br /&gt;
 &lt;br /&gt;
     if (size &amp;lt; 0)&lt;br /&gt;
         throw ArraySizeNegativeException(size);&lt;br /&gt;
 &lt;br /&gt;
     if (size &amp;lt; 10)&lt;br /&gt;
         throw ArraySizeTooSmallException(size);&lt;br /&gt;
 &lt;br /&gt;
     if (size &amp;gt; 30000)&lt;br /&gt;
         throw ArraySizeTooBigException(size);&lt;br /&gt;
 &lt;br /&gt;
     pType = new int[size];&lt;br /&gt;
     for (int i = 0; i&amp;lt;size; i++)&lt;br /&gt;
         pType[i] = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int&amp;amp; Array::operator[] (int offset)&lt;br /&gt;
 {&lt;br /&gt;
     int size = GetitsSize();&lt;br /&gt;
     if (offset &amp;gt;= 0 &amp;amp;&amp;amp; offset &amp;lt; GetitsSize())&lt;br /&gt;
         return pType[offset];&lt;br /&gt;
     throw ArrayIndexOutofBoundException();&lt;br /&gt;
     return pType[offset];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 const int&amp;amp; Array::operator[] (int offset) const&lt;br /&gt;
 {&lt;br /&gt;
     int size = GetitsSize();&lt;br /&gt;
     if (offset &amp;gt;= 0 &amp;amp;&amp;amp; offset &amp;lt; GetitsSize())&lt;br /&gt;
         return pType[offset];&lt;br /&gt;
     throw ArrayIndexOutofBoundException();&lt;br /&gt;
     return pType[offset];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     try&lt;br /&gt;
     {&lt;br /&gt;
         int choice;&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Enter the array size: &amp;quot;;&lt;br /&gt;
         std::cin &amp;gt;&amp;gt; choice;&lt;br /&gt;
         Array intArray(choice);&lt;br /&gt;
         for (int j = 0; j&amp;lt; 100; j++)&lt;br /&gt;
         {&lt;br /&gt;
             intArray[j] = j;&lt;br /&gt;
             std::cout &amp;lt;&amp;lt; &amp;quot;intArray[&amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &amp;quot;] okay...&amp;quot; &lt;br /&gt;
                 &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     catch (ArrayIndexOutofBoundException)&lt;br /&gt;
     {&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Unable to process your input!\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     catch (BaseArraySizeException&amp;amp; theException)&lt;br /&gt;
     {&lt;br /&gt;
         theException.PrintError();&lt;br /&gt;
     }&lt;br /&gt;
     catch (...)&lt;br /&gt;
     {&lt;br /&gt;
         std::cout &amp;lt;&amp;lt; &amp;quot;Something went wrong,&amp;quot;&lt;br /&gt;
             &amp;lt;&amp;lt; &amp;quot;but I&amp;quot;ve no idea what!&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     }&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Done.\n&amp;quot;;&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Enter the array size: 12&lt;br /&gt;
intArray[0] okay...&lt;br /&gt;
intArray[1] okay...&lt;br /&gt;
intArray[2] okay...&lt;br /&gt;
intArray[3] okay...&lt;br /&gt;
intArray[4] okay...&lt;br /&gt;
intArray[5] okay...&lt;br /&gt;
intArray[6] okay...&lt;br /&gt;
intArray[7] okay...&lt;br /&gt;
intArray[8] okay...&lt;br /&gt;
intArray[9] okay...&lt;br /&gt;
intArray[10] okay...&lt;br /&gt;
intArray[11] okay...&lt;br /&gt;
Unable to process your input!&lt;br /&gt;
Done.&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>