Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet140/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   136   137   138   139   140   141   142   143   ...   193
Bog'liq
Book-qtC


Глава 10. Объектно-ориентированное программирование
#include 
#include 
using namespace s t d ;
i n t main ( )
{
//перехват выхода индекса за границу массива:
try
{
s t r i n g s ( " s d f " ) ;
s . r e p l a c e ( 1 0 0 , 1 , 1 , ’ c ’ ) ;
}
catch ( out_of_range &e )
{
c o u t << "Обнаружен выход индекса за границу массива: " << e . what ( ) << e n d l ;
}
catch ( e x c e p t i o n &e )
{
c o u t << "Обнаружена ошибка неопределённого вида: " << e . what ( ) << e n d l ;
}
catch ( . . . )
{
c o u t << "Неизвестная ошибка\ n " ;
}
//перехват ошибки, возникающей в момент выполнения:
try
{
throw r u n t i m e _ e r r o r ( "ошибка в ходе выполнения" ) ;
}
catch ( r u n t i m e _ e r r o r &e )
{
c o u t << "Обнаружена ошибка при выполнении программы: " << e . what ( ) << e n d l ;
}
catch ( e x c e p t i o n &e )
{
c o u t << "Обнаружена ошибка неопределённого вида: " << e . what ( ) << e n d l ;
}
catch ( . . . )
{
c o u t << "Неизвестная ошибка\ n " ;
}
return 0 ;
}
В первом случае исключение с индикатором out_of_range генерируется авто-
матически, когда мы допускаем выход индекса за границу строки (такая возмож-
ность реализована классом string из стандартной библиотеки). Во втором слу-
чае исключительную ситуацию с индикатором runtime_error (обозначающим
ошибку, возникающую в момент выполнения программы) мы порождаем прину-
дительно, передавая конструктору объекта — индикатора исключения строку с
описанием подробностей.
10.6
Шаблоны классов
Шаблоны классов во многом похожи на шаблоны функций, рассмотренные
ранее. Точно так же, как и в случае шаблонов функций, шаблоны классов позво-
ляют отделить общий алгоритм от его реализации под конкретные типы данных.
Классический пример ситуации, когда выгодно применять шаблоны классов
— это так называемые контейнеры, т. е. классы, содержащие наборы некоторых
Программирование на языке С++ в среде Qt Creator


10.6. Шаблоны классов
317
значений (динамические списки, массивы, множества). Закладывая тип данных
элемента как параметр шаблона, можно создать универсальный класс-контейнер,
а на его основе порождать объекты для хранения наборов элементов конкретного
типа — контейнер целых чисел, контейнер строк и т. д.
Описание шаблона класса также имеет много общего с шаблоном функции.
Описание класса точно так же начинают с ключевого слова template, за которым
следует список формальных параметров шаблона в угловых скобках. Этот же за-
головок повторяется и перед описанием методов класса. В качестве параметров
шаблона можно передавать типы данных или константы, но перед идентифика-
тором, обозначающим тип данных, в списке формальных параметров ставится
ключевое слово class.
В отличие от шаблонов функций, для которых фактические параметры шаб-
лона (т. е. конкретные типы данных) определяются по типам аргументов, пе-
реданных функции, для шаблонов классов фактические параметры необходимо
передавать явно. Список фактических параметров шаблона указывается после
имени класса в угловых скобках во всех случаях, когда имя шаблонного клас-
са используется в программе — например, при порождении объектов, или при
указании принадлежности элемента-члена класса. Дальнейшее обращение с по-
рождёнными объектами не отличается от обычных классов.
Рассмотрим в качестве простого примера уже знакомый класс point, который
хранит пару координат точки и на этот раз имеет метод info(), выводящий
координаты на экран.
#include
using namespace s t d ;
template 
c l a s s p o i n t
{
Type x , y ;
// . . .
public :
p o i n t ( Type x , Type y ) { this−>x=x ; this−>y=y ; }
void i n f o ( ) ;
} ;
template 
void p o i n t  : : i n f o ( )
{
c o u t << "Координаты точки: x = " << x << " , y = " << y << e n d l ;
}
main ( )
{
p o i n t  f ( 1 0 . 1 , 2 0 . 5 ) ;
f . i n f o ( ) ;
}
Как видим, конкретный тип (в нашем случае float) мы указали при созда-
нии объекта в угловых скобках. Точно так же мы могли указать любой стандарт-
ный тип данных, а могли — пользовательский тип, объявленный в программе.
Однако необходимо помнить, что шаблоны функций и шаблоны классов могут
работать только для тех типов данных (в т. ч. классов), которые поддерживают
необходимые операции. Например, если мы захотим создать экземпляр класса
point
для хранения пары объектов какого-то собственного класса X, этот класс
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


318
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   136   137   138   139   140   141   142   143   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish