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



Download 5,27 Mb.
Pdf ko'rish
bet134/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   130   131   132   133   134   135   136   137   ...   193
Bog'liq
Book-qtC


Глава 10. Объектно-ориентированное программирование
Рис. 10.4: Иерархия классов потокового ввода-вывода
Строковые потоки, осуществляющие ввод-вывод в памяти, представлены
классами istringstream и ostringtstream, порождёнными соответственно от
istream
и ostream, а также универсальным классом двунаправленного ввода-
вывода stringtream, порождённым от iostream. Эти классы включают функции
(геттеры и сеттеры) для использования строки в качестве буфера.
Файловый ввод-вывод осуществляют классы ifstream и oftstream, порож-
дённые соответственно от istream и ostream, а также универсальный класс
fstream
, порождённый от iostream. Эти классы содержат методы для открытия
и закрытия файлов, аналогичные функциям fopen() и fclose() языка С.
Очевидно, что значительная часть различий между стандартным вводом-
выводом, файловыми и строковыми потоками скрыта на транспортном уровне.
Базовый класс streambuffer олицетворяет собой универсальный потоковый
буфер. Будучи абстрактным классом, он не содержит в себе специфики кон-
кретных оконечных устройств; однако в нём объявлены две чисто виртуальные
функции: overflow() и underflow(), которые должны быть перегружены в про-
изводных классах, чтобы выполнять действительную передачу символов между
символьным буфером и конкретными оконечными устройствами.
Класс потокового буфера поддерживает две символьные последовательности:
область получения (get), представляющую последовательность символов, полу-
чаемых из оконечного устройства, и область выдачи (put), т. е. выходную после-
довательность для записи на устройство. Также в классе предусмотрены функ-
ции, извлекающие очередной символ из буфера (sgetc() и т. д.) и помещающие
очередной символ в буфер (sputc() и т. д.), которые обычно используются уров-
нем форматирования. Дополнительно потоковый буфер содержит также объект
локали.
Производный от streambuf класс filebuf используется для работы с файла-
ми и содержит для этого ряд функций, таких как open() и close(). Он также на-
следует объект локали от базового класса для перекодирования между внешней
и внутренней кодировками (например, как уже упоминалось, между кодировкой
Программирование на языке С++ в среде Qt Creator


10.5. Обработка исключений
305
Unicode и внутренним представлением мультиязычных символов значениями ти-
па wchar_t).
Класс stringbuf также является производным от streambuf. Поскольку он
предназначен для работы со строками, внутренний буфер одновременно являет-
ся и оконечным устройством. По мере необходимости внутренний буфер может
динамически изменять свой размер, чтобы принять все записанные в него симво-
лы. Класс позволяет получить копию внутреннего буфера, а также скопировать
в него строку.
Взаимодействие между уровнем форматирования и транспортным уровнем
осуществляется следующим образом. Класс ios, как мы уже упоминали, содер-
жит в себе указатель на потоковый буфер. В производных от него классах (таких
как fstream или stringstream) содержатся указатели на объекты соответствую-
щих классов транспортного уровня (filebuf или stringbuf). Классы транспорт-
ного уровня можно также использовать и непосредственно, для неформатирован-
ного ввода-вывода — точно так же, как их использует уровень форматирования.
Представленная на рисунке иерархия могла бы быть описана следующим об-
разом:
c l a s s i o s
{ . . . } ;
c l a s s os tream : public i o s { . . . } ;
c l a s s i s t r e a m : public i o s { . . . } ;
c l a s s o f s t r e a m : public os tream { . . . } ;
c l a s s i f s t r e a m : public i s t r e a m { . . . } ;
c l a s s o s t r i n g s t r e a m : public os tream { . . . } ;
c l a s s i s t r i n g s t r e a m : public i s t r e a m { . . . } ;
c l a s s i o s t r e a m : public ostream , public i s t r e a m { . . . } ;
c l a s s f s t r e a m : public i o s t r e a m { . . . } ;
c l a s s s t r i n g s t r e a m : public i o s t r e a m { . . . } ;
10.5
Обработка исключений
10.5.1
Общие понятия
Классический подход к обработке ошибок в программе, разработанной в рам-
ках процедурного подхода, предполагает анализ значений, возвращаемых функ-
циями. Например, многие библиотечные функции в случае возникновения ошиб-
ки или какой-либо непредвиденной ситуации возвращают нулевое значение, ин-
терпретируемое как «ложно», а в случае успешной работы — ненулевое, т. е.
«истина». При необходимости передачи более детальной информации об ошибке,
код ошибки может сохраняться в некую глобальную переменную (библиотечные
функции, унаследованные из языка С, для этой цели используют глобальную
переменную errno).
У этого подхода есть два существенных недостатка. Во-первых, он не поощ-
ряет программиста проверять, была ли корректной работа вызванной функции.
Фактически, наоборот: программа, в которой половина вызовов функции обер-
нуты условным оператором, анализирующим возвращаемое значение, выглядит
менее стройной и хуже читается из-за насыщенности однотипными конструкци-
ями, не имеющими отношения к основному алгоритму работы. По этой причине
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


306
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   130   131   132   133   134   135   136   137   ...   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