Докато традиционните низове във С – стил са били винаги прости за употреба , С++ - низовите класове правят низовото манипулиране извънредно лесно . Например , използвайки string обекти може да добавите оператор за присвояване на ограден с кавички низ към string , релационни оператори за сравняване на низове и голямо разнообразие от низоманипулиращи функции които правят поднизовите операции удобни . Например , разгледайте следната програма :
// Демонстрира string
# include < iostream >
# include < string >
using namespace std ;
int main ( )
{
string str1 = “ abcdefghijklmnopqrstuvwxyz “ ;
string str2 ;
string str3 ( str1 ) ;
str2 = str1.substr ( 10 , 5 ) ;
cout << “str1 : “ << str1 << endl ;
cout << “str2 : “ << str2 << endl ;
cout << “str3 : “ << str3 << endl ;
str1.replace ( 5 , 10 , “ “ ) ;
cout << “ str1.replace ( 5 , 10 , \“ \“ ) : “
<< str1 << endl ;
str1 = “ one “ ;
str2 = “ two “ ;
str3 = “ three “ ;
cout << “str1.compare ( str2 ) : “ ;
cout << str1.compare ( str2 ) << endl ;
if ( str1 < str2 ) cout << “str1 is less than str2 \n “ ;
string str4 = str1 + “ “ + str2 + “ “ + str3 ;
cout << “str4 : “ << str4 << endl ;
int i = str4.find ( “ wo “ ) ;
cout << “ str4.substr ( i ) : “ << str4.substr ( i ) ;
return 0 ;
}
Изхода на програмата е :
str1 : abcdefghijklmnopqrstuvwxyz
str2 : klmno
str3 : abcdefghijklmnopqrstuvwxyz
str1.replace ( 5 , 10 , “ “ ) : abcdepqrstuvwxyz
str1.compare ( str2 ) : -1
str1 is less than str2
str4 : one two three
str4.substr ( i ) : wo three
Забележете леснотата с която низовото манипулиране е изпълнено . Например , + се използва да свърже низове и < се използва да сравни два низа . Изпълнявайки тези операции със използване на С – стиловите , нулево – терминирани низове , е по – удобно от извикването на strcat ( ) и
strcmp ( ) където са изисквани . Понеже С++ string обектите могат да бъдат свободно смесвани със С – стиловите , нулево – терминирани низове , няма неудобство да ги използвате в програми – а има значителна ползи .
Изключения
Стандартната С++ библиотека дефинира два хедъра които се отнасят за изключенията : < exception > и < stdexcept > . Изключенията се използват да докладват за грешни условия . Всеки от тези хедъри е разгледан тук .
< exception >
Хедъра < exception > дефинира класове , типове и функции които са свързани със манипулирането на изключения . Класовете дефинирани от < exception > са показани тук :
Клас Предназначение
еxception Базов клас за всички изключения дефинирани в
стандартната С++ библиотека
bad_exception Типа изключение върнато от
функцията unexpected ( )
Типовете дефинирани от < exception > са :
Тип Значение
terminate_handler typedef void ( *terminate_handler )( ) ;
unexpected_handler typedef
void ( * unexpected_handler ) ( ) ;
Функциите са показани тук :
Функция Описание
terminate_handler Установява функцията
set_terminate ( terminate_handler fn ) определена от fn като
throw ( ) ; прекъсващ манипулатор .
Връща се указател към стария
прекъсващ манипулатор
unexpected_handler Установява функцията
set_unexpected ( unexpected_handler fn ) определена от fn като
throw ( ) ; unexpected манипулатор .
Връща се указател към стария
unexpected манипулатор
void terminate ( ) ; Извиква прекъсващия
манипулатор когато не е
обработено фатално изключение ;
извиква abort ( ) по подразбиране
bool uncaught_exception ( ) ; Връща true ако е непрехванато
изключение
void unexpected ( ) ; Извиква манипулатора за
unexpected изключения когато
функция прехвърли неразрешено
изключение . По подразбиране се
извиква terminate ( )
< stdexcept >
Хедъра < stdexcept > дефинира няколко стандартни изключения които могат да бъдат прехвърлени от С++ - библиотечни функции и/или системата . Има два общи типа изключения дефинирани от < stdexcept > : логически грешки и грешки по време на изпълнение . Логически грешки стават при грешка на програмиста . Грешки по време на изпълнение се причиняват от грешки във библиотечните функции или runtime системата и са извън контрола на програмиста . Стандартните изключения дефинирани от С++ причинени от логически грешки са производни на базовия клас logic_error . Тези изключения са изброени тук :
Изключение Значение
domain_error Станала е грешка в областта
invalid_argument Използва се невалиден аргумент
във извикването на функция
length_error Oпит за създаване на обект
който е твърде голям
out_of_range Аргумента на функция не е
във изисквания интервал
Следните грешки по време на изпълнение са производни от базовия клас runtime_error :
Изключение Значение
overflow_error Станало е аритметично препълване
range_error Станала е грешка във вътрешния интервал
underflow_error Станало е препълване след десетичната точка .
Сподели с приятели: |