class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

STL

основы

введение
Инструментарий
Проекты в C++
Комментарий
Утверждения
Идентификаторы
Область видимости
Литералы
Типы данных, переменные
Константы, перечисления
Выражения и операции
Агрегатные типы
Указатели
Ссылки
Массивы
Строки
Управляющие операторы
Функции
Аргументы функции

ООП

Терминология
Определение классов
Константные методы
Статические члены
Наследование
Инкапсуляция
Полиморфизм
Инициализация и уничтожение объектов
this

прочее

шаблоны
макросы
динамическая память
исключения
rtti

Справочник по C++

Исключения

Механизм исключений позволяет легко отследить различные ошибки в программе.

Оператор try определяет блок, в котором необходимо отследить исключения.

Оператор throw вызывает исключение указанного типа.

Оператор catch определяет блок обработки исключения указанного типа. Подобных блоков может быть несколько для каждого типа. Если же тип исключения не важен или нужно обработать исключения по умолчанию, то в качестве аргумента используется троеточие.


#include <iostream>
using namespace std; 

float divfunc(float a, float b){
if(b==0) throw 1;	
return a/b;	
}

int main() {
float a,b,c;
cout<<"input a: ";
cin>>a;
cout<<"input b: ";
cin>>b;

try {
	c=divfunc(a,b);
	// если b==0, то следующая строчка 
	// не выполнится
	cout<<"c="<<c<<endl;	
	}
catch(...) 	{	
	cout<<"exception"<<endl;	
	}

return 0;
}

атрибут throw

В некоторых компиляторах можно явно указать, что функция или метод могут вызвать исключение. А значит она должна быть помещена в блок try или внутри такой же функции.

Другие компиляторы могут просто игнорировать такую конструкцию, не сообщая об ошибке синтаксиса.


// функция может генерировать исключение 
// (это, например, ошибка в MinGw)
void func1(int arg) throw(...) {

}


void func1(int arg) throw() {

}

// функция может генерировать исключение типа int
void func3(int arg) throw(int) {
	if(arg>5) throw 2;
}

stl исключения

В STL определено несколько классов исключений, которые используются различными компонентами библиотеки. Например, в файле stdexcept объявлены стандартные исключения:

Эти и другие классы являются потомками класса exception. Через виртуальный метод what можно получить дополнительную информацию об исключении.

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


#include <iostream>
#include <stdexcept>
using namespace std;


class Range{
int r1,r2,pos;

public:
Range(int rr1,int rr2, int ppos) {r1=rr1;r2=rr2;pos=ppos;}

void setPos(int ppos){
if(ppos<r1 ||ppos>r2)
   throw std::invalid_argument("setPos illegal argument!");
}
};


int main() {
Range r(10,20,12);

try{
   r.setPos(25);
}catch(exception &e){
   cout<<e.what();
}catch(...) {
   cout<<"unknown exception"<<endl;
}

return 0;
}

Рейтинг@Mail.ru