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



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


Глава 10. Объектно-ориентированное программирование
несложно переписать под нужный тип. Более того, поскольку для большинства
типов никакого специфического поведения не требуется, в типаж сам по себе мо-
жет быть шаблоном класса. В этом случае как дополнительный параметр шабло-
на будет передаваться шаблонный класс, основанный на том же типе, что пере-
дан в качестве основного параметра — кроме тех редких случаев, когда требуется
реализовать специфическое поведение:
template
c l a s s M a t r i x T r a i t s
{
// . . .
} ;
template<>
c l a s s M a t r i x T r a i t s 
{
// . . .
} ;
template
c l a s s m a t r i x
{
// . . .
} ;
. . .
m a t r i x  > m1 ;
Как правило, члены класса-типажа являются статическими функциями, по-
этому его обычно используют без создания объекта.
10.6.2
Пример реальной иерархии шаблонов
Стандартная библиотека C++ практически полностью построена на шаблонах
и потому представляет достаточно примеров профессионального использования
данного механизма. Рассмотрим в качестве наглядной иерархии шаблонов уже
знакомые нам классы потокового ввода-вывода.
Изначально библиотека потокового ввода-вывода действительно представля-
ла собой такую иерархию классов, которая изображена на рис. 10.4. Однако по
мере увеличения спроса на приложения, работающие с текстом сразу на несколь-
ких языках, встал вопрос о поддержке кодировки Unicode, позволяющей совме-
щать в одной строке символы разных национальных алфавитов. В зависимости
от языка, символ в Unicode может кодироваться различным количеством байт
— от одного до четырёх. В C++ для поддержки таких символов существует тип
wchar_t
(от англ. wide characters — «широкие символы»). Фактически понадоби-
лось создать иерархию классов, аналогичную классам iostream, но работающих
с типом данных wchar_t вместо char. В итоге библиотека iostream была пере-
работана на основе механизма шаблонов.
Классы, основанные на шаблонах, носят имена, аналогичные описанным
в разделе 10.4.6, с добавлением приставки «basic» и знака подчёркивания:
basic_ios
, basic_istream, basic_ostream и т. д. Привычные программисту име-
на классов для работы с символами типа char (как, впрочем, и с wchar_t) реа-
лизованы через подстановку имени типа в конструкции typedef:
typedef b a s i c _ i o s  i o s ;
Программирование на языке С++ в среде Qt Creator


10.7. Элементы стандартной библиотеки C++
321
typedef b a s i c _ i o s  w i o s ;
typedef b a s i c _ i s t r e a m  i s t r e a m ;
typedef b a s i c _ i s t r e a m  wi s tream ;
. . . . . .
Используя базовые шаблоны библиотеки, можно реализовать потоковый
ввод-вывод на любом собственном типе символьных данных вместо существу-
ющих, подставив его в качестве параметра шаблона и обеспечив работу соответ-
ствующих операторов.
Хотя по виду конструкции typedef может показаться, что шаблоны библио-
теки потокового ввода-вывода имеют один параметр, на самом деле это не совсем
так. Второй параметр — это как раз типаж символов, т. е. отдельный шаблон-
ный класс, который реализует базовые операции с символами и строками для
заданного типа символов. Эти базовые операции — присваивание символов, ко-
пирование и сравнение их последовательностей, приведение к целому типу и др.
Данный параметр имеет значение по умолчанию, и потому может не использо-
ваться при объявлении экземпляров шаблона. В оригинале же шаблоны классов
потокового ввода-вывода выглядят следующим образом (в виду однотипности,
приведём по одному примеру для стандартного ввода-вывода, работы с файлами
и со строками):
template  > b a s i c _ i s t r e a m ;
template  > b a s i c _ i f s t r e a m ;
template , c l a s s A l l o c a t o r =
a l l o c a t o r  > b a s i c _ i s t r i n g s t r e a m ;
Именно эти потоковые шаблоны определяют на самом деле методы для разбо-
ра и форматирования, являющиеся перегруженными версиями операторов ввода
operator>>
и вывода operator<<.
Аналогично реализованы шаблоны для потоковых буферов:
template  > b a s i c _ s t r e a m b u f ;
template  > b a s i c _ f i l e b u f ;
10.7
Элементы стандартной библиотеки C++
10.7.1
Базовые понятия
Стандартная библиотека C++ — это общий набор шаблонов классов и алгорит-
мов, позволяющий программистам легко реализовывать стандартные структуры
данных, такие как очереди, списки и стеки.
В библиотеке выделяют пять основных компонентов:
• Контейнер (container) — хранение набора объектов в памяти.
• Итератор (iterator) — обеспечение средств доступа к содержимому кон-
тейнера.
• Алгоритм (algorithm) — определение вычислительной процедуры.
• Адаптер (adaptor) — адаптация компонентов для обеспечения различного
интерфейса.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


322
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   138   139   140   141   142   143   144   145   ...   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