2012-03-14 3 views
0

Когда вы пишете класс, который генерирует исключение, полезно ли обрабатывать исключение внутри класса? Или лучше, чтобы пользователь класса обрабатывал его в основной программе?Практика обработки исключений при написании классов

например, это хорошая идея написать класс со следующим?

class Queue{ 
    Object Queue<Object>::getFront() 
    { 
     try 
     { 
      if(isEmpty()) 
       throw Underflow(); 
     } catch(Underflow E) 
     { 
      cerr<<"caught underflow\n"; 
      return null; 
     } 
     return queuearray[ front ]; 
    } 
} 

или лучше просто иметь

Object Queue<Object>::getFront() 
{ 
    if(isEmpty()) 
     throw Underflow(); 
    return queuearray[ front ];   
} 

, а затем позволить пользователю осуществить исключение в основной или там, где функция вызывается?

+0

Почему бы вам не сделать это? – SLaks

+0

, о котором вы говорите? первый или второй? – mma1480

+0

Первый. Это не лучше простого 'if'. – SLaks

ответ

0

Это зависит от того, где лучше всего обрабатывать исключение. Если исключение восстанавливается и не влияет на поток программы, вы можете спокойно обрабатывать его и регистрировать. Если вы считаете, что вызывающий может лучше решить, что делать, а затем выбросить исключение.

Помните, что вы должны использовать исключения, если обстоятельства действительно исключительны - вещи, находящиеся вне контроля приложения. Приведенный выше пример не идеален. Если вы выбрасываете исключение, зачем беспокоиться об этом в строке ниже? Просто сделайте

class Queue{ 
Object Queue<Object>::getFront() 
{ 
    try 
    { 
     if(isEmpty()) 
      return null; 
    } 
    return queuearray[ front ]; 
    } 
} 
} 
+0

Я вижу. Спасибо. Тогда, когда это идеальный способ бросить и обрабатывать исключения, если вы можете просто использовать инструкции if. похоже, что это делает вещи действительно сложными больше, чем должно быть. – mma1480

Смежные вопросы