🗊 Презентация Строковые потоки и буферы

Категория: Образование
Нажмите для полного просмотра!
Строковые потоки и буферы, слайд №1 Строковые потоки и буферы, слайд №2 Строковые потоки и буферы, слайд №3 Строковые потоки и буферы, слайд №4 Строковые потоки и буферы, слайд №5 Строковые потоки и буферы, слайд №6 Строковые потоки и буферы, слайд №7 Строковые потоки и буферы, слайд №8 Строковые потоки и буферы, слайд №9 Строковые потоки и буферы, слайд №10 Строковые потоки и буферы, слайд №11 Строковые потоки и буферы, слайд №12 Строковые потоки и буферы, слайд №13 Строковые потоки и буферы, слайд №14 Строковые потоки и буферы, слайд №15 Строковые потоки и буферы, слайд №16 Строковые потоки и буферы, слайд №17 Строковые потоки и буферы, слайд №18 Строковые потоки и буферы, слайд №19 Строковые потоки и буферы, слайд №20 Строковые потоки и буферы, слайд №21 Строковые потоки и буферы, слайд №22 Строковые потоки и буферы, слайд №23 Строковые потоки и буферы, слайд №24 Строковые потоки и буферы, слайд №25 Строковые потоки и буферы, слайд №26 Строковые потоки и буферы, слайд №27 Строковые потоки и буферы, слайд №28 Строковые потоки и буферы, слайд №29 Строковые потоки и буферы, слайд №30 Строковые потоки и буферы, слайд №31 Строковые потоки и буферы, слайд №32 Строковые потоки и буферы, слайд №33 Строковые потоки и буферы, слайд №34 Строковые потоки и буферы, слайд №35 Строковые потоки и буферы, слайд №36 Строковые потоки и буферы, слайд №37 Строковые потоки и буферы, слайд №38 Строковые потоки и буферы, слайд №39 Строковые потоки и буферы, слайд №40

Содержание

Вы можете ознакомиться и скачать презентацию на тему Строковые потоки и буферы. Доклад-сообщение содержит 40 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Тест с отчетом 2 1) Каким ключевым словом обозначаются встраиваемые функции?
Описание слайда:
Тест с отчетом 2 1) Каким ключевым словом обозначаются встраиваемые функции?

Слайд 2


Функции позиционирования в потоках данных С++ Позиционирование чтения и записи выполняется отдельными функциями (суффикс «g» означает «get», а...
Описание слайда:
Функции позиционирования в потоках данных С++ Позиционирование чтения и записи выполняется отдельными функциями (суффикс «g» означает «get», а суффикс «p» - «put»). Не все потоковые классы поддерживают позиционирование! Например, для потоков данных cin, cout и сеrr позиционирование не определено. Операции файлового позиционирования определяются в базовых классах, потому что обычно используются ссылки на объекты типов istream и ostream. Функции seekg() и seekp() могут вызы-ваться для абсолютных или относительных позиций. Функции tellg() и tellp() возвращают абсолютную позицию в виде значения типа pos_type. Это значе-ние не является целым числом или индексом, задающим позицию символа, поскольку логическая позиция может отличаться от фактической.

Слайд 3


Что такое позиция? Что есть тип pos_type? Стандартная библиотека С++ определяет глобальный класс шаблона fpos для представления позиций в файлах. На...
Описание слайда:
Что такое позиция? Что есть тип pos_type? Стандартная библиотека С++ определяет глобальный класс шаблона fpos для представления позиций в файлах. На базе класса fpos< > определяются типы streampos (для потоков данных char) и wstreampos (для потоков данных wchar_t). Эти типы используются для определения pos_type соответствующих классов трактовок. Наконец, переменная типа pos_type класса трактовок требуется для определения типа pos_type соответствующих потоковых классов. Следовательно, позиции в потоке данных также могут представляться типом streampos, но использовать типы long и unsigned long было бы неправильно, потому что streampos не является целочисленным типом (а точнее, перестал им быть!). Пример: // Сохранение текущей позиции std::ios::pos_type pos = file.tellg(); // Переход к позиции. хранящейся в pos file.seekg(pos); Следующие объявления эквивалентны: std::ios::pos_type pos; std::streamppos pos;

Слайд 4


Что такое относительная позиция? В версиях с относительным позиционированием смещение задается по отношению к трем позициям, которые описываются...
Описание слайда:
Что такое относительная позиция? В версиях с относительным позиционированием смещение задается по отношению к трем позициям, которые описываются соответствующими константами, определенными в классе ios_base и относящихся к типу seekdir.

Слайд 5


Пример позиционирования // Заголовочные файлы для ввода-вывода #include #include void printFileTwice (const char* filename) { std::ifstream...
Описание слайда:
Пример позиционирования // Заголовочные файлы для ввода-вывода #include #include void printFileTwice (const char* filename) { std::ifstream file(filename); // Открытие файла std::cout

Слайд 6


Перенаправление потоков данных Перенаправление потока данных осуществляется назначением потокового буфера. В механизме назначения потоковых буферов...
Описание слайда:
Перенаправление потоков данных Перенаправление потока данных осуществляется назначением потокового буфера. В механизме назначения потоковых буферов перенаправление потоков данных находится под управлением программы, операционная система здесь не участвует. В результате выполнения следующего фрагмента данные, отправленные в поток данных cout, будут передаваться не в стандартный выходной канал, а в файл cout.txt: std::ofstream filе ("cout.txt"); std::cout.rdbuf (file.rdbuf()); Для передачи всей форматной информации между потоками данных можно воспользоваться функцией copyfmt(): std::ofstream file("cout.txt"); file.copyfmt (std::cout); std::cout.rdbuf (file.rdbuf());

Слайд 7


Перенаправление потоков данных - пример #include #include using namespace std; void redirect(ostream&); int main() { cout
Описание слайда:
Перенаправление потоков данных - пример #include #include using namespace std; void redirect(ostream&); int main() { cout

Слайд 8


Перенаправление потоков данных - пример void redirect (ostream& strm) { ofstream file("redirect.txt"); streambuf* strm_buffer =...
Описание слайда:
Перенаправление потоков данных - пример void redirect (ostream& strm) { ofstream file("redirect.txt"); streambuf* strm_buffer = strm.rdbuf(); // Сохранение выходного буфера потока strm.rdbuf (file.rdbuf()); // Перенаправление вывода в файл file

Слайд 9


Потоки чтения и записи Обычно файл открывается для чтения/записи при помощи класса fstream: std::fstream file ("example.txt", std::ios::in...
Описание слайда:
Потоки чтения и записи Обычно файл открывается для чтения/записи при помощи класса fstream: std::fstream file ("example.txt", std::ios::in | std::ios::out); Можно использовать два разных потоковых объекта, по одному для чтения и записи. std::ofstream out("example.txt", ios::in | ios::out); std::istream in(out.rdbuf()); Объявление out открывает файл. Объявление in использует потоковый буфер out для чтения из него. Обратите внимание: поток данных out должен открываться для чтения и записи. Если открыть его только для записи, чтение из потока данных приведет к непредсказуемым последствиям. Также обратите внимание на то, что in определяется не с типом ifstream, а только с типом istream. Файл уже открыт, и у него имеется соответствующий потоковый буфер. Все, что требуется, - это второй потоковый объект. Как и в предыдущих примерах, файл закрывается при уничтожении объекта файлового потока данных.

Слайд 10


Потоки чтения и записи Еще вариант - создать буфер файлового потока данных и назначить его обоим потоковым объектам. Решение выглядит так:...
Описание слайда:
Потоки чтения и записи Еще вариант - создать буфер файлового потока данных и назначить его обоим потоковым объектам. Решение выглядит так: std::filebuf buffer; std::ostream out(&buffer); std::istream in(&buffer); buffer.open("example.txt", std::ios::in | std::ios::out); Объект filebuf является обычной специализацией класса basic_filebuf для типа char. Класс определяет потоковый буфер, используемый файловыми потоками данных. Далее рассмотрим пример, в котором с помощью цикла в файл выводится четыре строки. После каждой операции вывода все содержимое файла записывается в стандартный выходной поток данных.

Слайд 11


Потоки чтения и записи - пример #include #include using namespace std; void main() { // Открытие файла "example.dat" для чтения и записи...
Описание слайда:
Потоки чтения и записи - пример #include #include using namespace std; void main() { // Открытие файла "example.dat" для чтения и записи filebuf buffer; ostream output(&buffer); istream input(&buffer); buffer.open ("example.dat", ios::in | ios::out | ios::trunc); for (int i=1; i

Слайд 12


Потоки чтения и записи - пример Хотя для чтения и записи используются два разных объекта потоков данных, позиции чтения и записи тесно связаны между...
Описание слайда:
Потоки чтения и записи - пример Хотя для чтения и записи используются два разных объекта потоков данных, позиции чтения и записи тесно связаны между собой. Функции seekg() и seekp() вызывают одну и ту же функцию потокового буфера! Следовательно, для того чтобы вывести все содержимое файла, необходимо всегда устанавливать позицию чтения в начало файла. После вывода всего содержимого файла позиция чтения/записи снова перемещается в конец файла для присоединения новых строк. Операции чтения и записи с одним файлом должны разделяться операцией позиционирования (кроме выхода за конец файла во время чтения). Пропуск операции позиционирования приведет к искажению содержимого файла или еще более фатальным ошибкам. Вместо последовательной обработки символов все содержимое файла можно вывести одной командой, для чего оператору

Слайд 13


Потоковые классы для работы со строками Механизм потоковых классов также может использоваться для чтения или записи в строки. У строковых потоков...
Описание слайда:
Потоковые классы для работы со строками Механизм потоковых классов также может использоваться для чтения или записи в строки. У строковых потоков данных имеется буфер, но нет канала ввода-вывода. Для работы с буфером/строкой используются специальные функции. Основная область применения строковых потоков данных - обработка вводимых/выводимых данных независимо от фактического механизма ввода-вывода. Например, выводимый текст можно отформатировать в строке и передать в выходной канал позднее. Другой вариант - ввод данных по строкам и обработка строк с использованием строковых потоков данных. Раньше в классах строковых потоков данных для представления строк использовался тип char*. В современной библиотеке для представления строк используется тип string (или в общем случае - basic_string.

Слайд 14


Классы строковых потоков данных Для строк определены следующие потоковые классы, которые явля-ются аналогами соответствующих классов файловых потоков...
Описание слайда:
Классы строковых потоков данных Для строк определены следующие потоковые классы, которые явля-ются аналогами соответствующих классов файловых потоков данных: шаблон basic_istringstream со специализациями istringstream и wistringstream для чтения из строк («строковыЙ входной поток данных»); шаблон basic_ostringstream со специализациями ostringstream и wostгingstream для записи в строки («строковый выходной поток данных»); шаблон basic_stringstream со специализациями stringstream и wstringstream для чтения и записи в строки; шаблон basic_stringbuf со специализациями stringbuf и wstringbuf используется другими классами строковых потоков данных для реальных чтения и записи символов.

Слайд 15


Иерархия классов cтроковых потоков данных .
Описание слайда:
Иерархия классов cтроковых потоков данных .

Слайд 16


Основные операции со строковыми потоками данных Основная операция реализуется функциями: str() - возвращает буфер в виде строки; str(string) -...
Описание слайда:
Основные операции со строковыми потоками данных Основная операция реализуется функциями: str() - возвращает буфер в виде строки; str(string) - присваивает string содержимое буфера. Например cout

Слайд 17


Операции со строковыми потоками данных При создании строковых потоков данных могут задаваться флаги режима открытия файла и/или существующие строки....
Описание слайда:
Операции со строковыми потоками данных При создании строковых потоков данных могут задаваться флаги режима открытия файла и/или существующие строки. С флагами ios::app и ios::ate символы, записанные в строковый поток данных, присоединяются к существующей строке: #include std::string s; std::ostringstream os (s, ios::ate); os

Слайд 18


Правила построения пользовательских операторов ввода-вывода Правила, которые должны соблюдаться в пользовательских реализациях операторов...
Описание слайда:
Правила построения пользовательских операторов ввода-вывода Правила, которые должны соблюдаться в пользовательских реализациях операторов ввода-вывода. Они продиктованы типичным поведением стандартных операторов. Выходной формат должен допускать определение оператора ввода, читающего данные без потери информации. В некоторых случаях - особенно для строк эта задача практически невыполнима из-за проблем с пробелами. Пробел внутри строки невозможно отличить от пробела, разделяющего две строки. При вводе-выводе должна учитываться текущая форматная спецификация потока данных. Прежде всего это относится к ширине поля при выводе. При возникновении ошибок должен быть установлен соответствующий флаг состояния. Ошибки не должны изменять состояние объекта. Если оператор читает несколько объектов данных, промежуточные результаты сохраняются во временных объектах до окончательного принятия значения. Вывод не должен завершаться символом новой строки, в основном из-за того, что это не позволит вывести другие объекты в той же строке. При обнаружении ошибки форматирования следует по возможности прекратить чтение. Даже слишком большие данные должны читаться полностью. После чтения следует установить соответствующий флаг ошибки, а возвращаемое значение должно содержать полезную информацию (например, максимальное допустимое значение).

Слайд 19


Классы потоковых буферов – вывод символов Потоки данных не выполняют непосредственные операции чтения и записи, а поручают их потоковым буферам. С...
Описание слайда:
Классы потоковых буферов – вывод символов Потоки данных не выполняют непосредственные операции чтения и записи, а поручают их потоковым буферам. С точки зрения пользователя потокового буфера, класс basic_streambuf представляет собой нечто, принимающее и отправляющее символы, где traits_type определение типа в классе basic_streambuf. Открытые функции вывода символов: sputc(c) - выводит символ с в потоковый буфер; sputn(s, n) - выводит n символов из последовательности s в потоковый буфер. Функция sputc() возвращает traits_type::eof() в случае ошибки. Функция sputn() выводит количество символов, заданное вторым аргументом, если только выводу не помешают недостаточные размеры строкового буфера. Символы завершения строк при выводе не учитываются. Функция возвращает количество выведенных символов.

Слайд 20


Классы потоковых буферов – ввод символов При вводе иногда требуется узнать символ без его извлечения из буфера. Кроме того, желательно предусмотреть...
Описание слайда:
Классы потоковых буферов – ввод символов При вводе иногда требуется узнать символ без его извлечения из буфера. Кроме того, желательно предусмотреть возможность возврата символов в потоковый буфер. Соответствующие функции поддерживаются классами потоковых буферов.

Слайд 21


Потоковые буфера – ввод символов Функция in_avail() проверяет минимальное количество доступных символов. Например, с ее помощью можно убедиться в...
Описание слайда:
Потоковые буфера – ввод символов Функция in_avail() проверяет минимальное количество доступных символов. Например, с ее помощью можно убедиться в том, что чтение не будет заблокиро-вано при вводе с клавиатуры. С другой стороны, количество доступных симво-лов может быть больше значения, возвращаемого этой функцией. Пока потоковый буфер не достигнет конца потока данных, один из символов считается «текущим». Функция sgetc() используется для получения текущего символа без перемещения к следующему символу. Функция sbumpc() читает текущий символ и переходит к следующему, который становится текущим. Функция snextc(), переходит к следующему символу и читает новый текущий символ. Для обозначения неудачи все три функции возвращают traits_type::eof(). Функция sgetn() читает в буфер последовательность символов, максимальная длина которой передается в аргументе. Функция возвращает количество прочитанных символов. Функции sputbackc() и sungetc() возвращаются на одну позицию в потоке данных, вследствие чего текущим становится предыдущий символ. Функция sputbackc() может использоваться для замены предыдущего символа другим символом. При вызове этих функций необходимо соблюдать осторожность: нередко возврат ограничивается всего одним символом.

Слайд 22


Потоковые буфера – другие функции Отдельная группа функций используется для подключения объекта локального контекста, для смены позиции и управления...
Описание слайда:
Потоковые буфера – другие функции Отдельная группа функций используется для подключения объекта локального контекста, для смены позиции и управления буферизацией.

Слайд 23


Потоковые буфера – другие функции - пояснения Функция pubsetbuf() позволяет в определенной степени управлять стратегией буферизации потоковых...
Описание слайда:
Потоковые буфера – другие функции - пояснения Функция pubsetbuf() позволяет в определенной степени управлять стратегией буферизации потоковых буферов. Функции pubseekoff() и pubseekpos() используются для управления текущей позицией чтения и/или записи. Позиция зависит от последнего аргумента, который относится к типу ios_base: :openmode и по умолчанию равен ios_base::in | ios_base::out. При установленном флаге ios_base::in изменяется позиция чтения, а при установленном флаге ios_base::out - позиция записи. Функция pubseekpos() перемещает поток данных в абсолютную позицию, заданную первым аргументом, тогда как функция pubseekoff() использует смещение, заданное по отношению к другой позиции. Смещение передается в первом аргументе. Позиция, по отношению к которой задается смещение, передается во втором аргументе и может быть равна ios_base::cur, ios_base::beg или ios_base::end. Обе функции возвращают новую текущую позицию или признак недействи-тельной позиции. Чтобы обнаружить недействительную позицию, следует сравнить результат с объектом pos_type(off_type(-1)). Текущая позиция потока возвращается функцией pubseekoff(): sbuf.pubseekoff(0, std::ios::cur);

Слайд 24


Синхронизация со стандартными потоками данных С По умолчанию восемь стандартных потоков данных С++ (четыре символь-ных потока с однобайтовой...
Описание слайда:
Синхронизация со стандартными потоками данных С По умолчанию восемь стандартных потоков данных С++ (четыре символь-ных потока с однобайтовой кодировкой cin, cout, cerr и clog, а также четыре их аналога с расширенной кодировкой) синхронизируются с соответствующи-ми каналами из стандартной библиотеки С (stdin, stdout и stderr). По умолчанию clog и wclog используют тот же потоковый буфер, что и cerr и wcerr соответственно. Таким образом, по умолчанию они синхронизи-руются с stderr, хотя в стандартной библиотеке С у этих потоков данных нет прямых аналогов. В зависимости от реализации синхронизация может приводить к лишним затратам. Например, если стандартные потоки данных С++ реализованы с использованием стандартных файлов С, это фактически подавляет буфериза-цию соответствующих потоковых буферов. Однако буферизация необходима для выполнения некоторых оптимизаций, особенно для форматированного чтения. Чтобы программист мог переключиться на нужную реализацию, в классе ios_base определена статическая функция: sync_with_stdio() - возвращает информацию о том, синхронизируются ли стандартные объекты потоков данных со стандартными потоками данных С; sync_with_stdio(false) - запрещает синхронизацию потоков данных С++ и С (при условии, что функция была вызвана до первой операции ввода-вывода).

Слайд 25


Непосредcтвенная работа с потоковыми буферами Все функции классов basic_istream и basic_ostream, выполняющие чтение или запись символов, работают по...
Описание слайда:
Непосредcтвенная работа с потоковыми буферами Все функции классов basic_istream и basic_ostream, выполняющие чтение или запись символов, работают по одной схеме: сначала конструируется соответствующий объект sentry, а затем выполняется операция. Конструирование объекта sentry приводит к очистке буферов возможных связанных объектов, игнорированию пропусков (только при вводе) и выполнению операций, специфических для конкретных реализаций, например операций блокировки файлов в средах с параллельным функционированием нескольких потоков выполнения (threads), то есть в многопоточных средах. При неформатированном вводе-выводе многие операции потоков данных все равно бесполезны, разве что операция блокировки может пригодиться при работе с потоками в средах с параллельным функционированием нескольких потоков выполнения (поскольку в С++ проблемы многопоточности не решаются). Следовательно, при неформатированном вводе-выводе прямая работа с потоковыми буферами обычно более эффективна.

Слайд 26


Непосредcтвенная работа с потоковыми буферами (
Описание слайда:
Непосредcтвенная работа с потоковыми буферами (

Слайд 27


Непосредcтвенная работа с потоковыми буферами (>>) При получении указателя на потоковый буфер оператор >> выполняет прямое чтение данных. Например,...
Описание слайда:
Непосредcтвенная работа с потоковыми буферами (>>) При получении указателя на потоковый буфер оператор >> выполняет прямое чтение данных. Например, копирование стандартного входного потока данных в стандартный выходной поток также может выполняться следующим образом: Пример: #include int main () { // Копирование стандартного ввода в стандартный вывод std::cin >> std::noskipws >> std::cout.rdbuf(); } Обратите внимание на сброс флага skipws. В противном случае будут проигнорированы начальные пропуски во входных данных.

Слайд 28


Интернационализация С развитием глобального рынка интернaционализация стала играть более важную роль в разработке программного обеспечения. По этой...
Описание слайда:
Интернационализация С развитием глобального рынка интернaционализация стала играть более важную роль в разработке программного обеспечения. По этой причине в стандартную библиотеку С++ были включены средства написания локализо-ванного кода. В основном они связаны с вводом-выводом и обработкой строк.

Слайд 29


Поддержка разных кодировок символов Существуют два основных принципа определения кодировок, содержащих более 256 символов: много6айтовое и...
Описание слайда:
Поддержка разных кодировок символов Существуют два основных принципа определения кодировок, содержащих более 256 символов: много6айтовое и расширенное представления.

Слайд 30


Трактовки символов Различия в кодировках существенны для обработки строк и ввода-вывода. Строковые и потоковые классы специализируются встроенными...
Описание слайда:
Трактовки символов Различия в кодировках существенны для обработки строк и ввода-вывода. Строковые и потоковые классы специализируются встроенными типами char и wchar_t. Интерфейс встроенных типов должен оставаться неизменным, поэтому информация о разных аспектах представления символов выделяется в отдельный класс - так называемый класс трактовок символов. Он передается строковым и потоковым классам в аргументе шаблона. По умолчанию в этом аргументе передается класс char_traits, параметризованный по аргументу, определяющему тип символов строки или потока данных.

Слайд 31


Классы трактовки символов - функции
Описание слайда:
Классы трактовки символов - функции

Слайд 32


Классы трактовки символов – функции (дальше)
Описание слайда:
Классы трактовки символов – функции (дальше)

Слайд 33


Концепция локального контекста Распространенный подход к интернационализации основан на использовании специальных сред, называемых локальными...
Описание слайда:
Концепция локального контекста Распространенный подход к интернационализации основан на использовании специальных сред, называемых локальными контекстами (locale) и инкапсулиру-ющих национальные или культурные стандарты. В отношении интернационализации локальный контекст представляет собой набор параметров и функций, обеспечивающих поддержку национальных или культурных стандартов. В зависимости от локального контекста выбираются разные форматы вещественных чисел, дат, денежных сумм и т. д. Обычно локальный контекст определяется строкой в формате язык[зона[.код]] Здесь язык - обозначение языка (например, английский или немецкий), а зона - страна, географический регион или культура, в которой используется этот язык. Квалификатор код определяет кодировку символов. locale langLocale(""); - создание локального контекста. Пустая строка вместо имени локального контекста имеет особый смысл: она обозначает локальный контекст по умолчанию для окружения пользователя . Этот локальный контекст связывается со стандартным входным потоком данных командой: cout.imbue(langLocale);

Слайд 34


Фацеты На функциональном уровне локальный контекст делится на несколько специальных объектов. Объект, обеспечивающий работу некоторого аспекта...
Описание слайда:
Фацеты На функциональном уровне локальный контекст делится на несколько специальных объектов. Объект, обеспечивающий работу некоторого аспекта интернационализации, называется фацетом. Это означает, что объект локального контекста может рассматриваться как контейнер для различных фацетов. Для обращения к некоторому аспекту локального контекста тип соответствующего фацета передается в аргументе шаблонной функции use_facet(). Например, следующее выражение обращается к фацету типа numpunct для типа символов char объекта локального контекста loc: std::use_facet(loc) Каждый тип фацета определяется в виде класса, предоставляющего определенные сервисы. Например, тип фацета numpunct предоставляет сервис форматирования числовых и логических величин. Так, следующее выражение возвращает строку, используемую для представления true в локальном контексте loc: std::use_facet(loc).truename() Фацеты делятся на категории, используемые некоторыми конструкторами для создания новых объектов локальных контекстов на основании комбинации других объектов.

Слайд 35


Категории фацетов стандартной библиотеки С++
Описание слайда:
Категории фацетов стандартной библиотеки С++

Слайд 36


Фацеты - использование Определение собственных версий фацетов позволяет создавать специализированные локальные контексты. В следующем примере...
Описание слайда:
Фацеты - использование Определение собственных версий фацетов позволяет создавать специализированные локальные контексты. В следующем примере показано, как определяется фацет для использования русских строковых представлений логических величин: class RusBoolNames : public std::numpunct_byname { public: RusBoolNames (const char *name): std::numpunct_byname(name) {} protected: virtual std::string do_truename () const {return "истина"; } virtual std::string do_falsename () const {return "ложь"; } }; Чтобы использовать этот фацет в локальном контексте, необходимо создать новый объект локального контекста при помощи специального конструктора класса locale. В первом аргументе этого конструктора передается объект локального контекста, а во втором - указатель на фацет. Созданный локальный контекст идентичен первому аргументу во всем, кроме фацета, переданного во втором аргументе. Заданный фацет устанавливается в созданном объекте контекста после копирования первого аргумента: std::locale loc (std::locale(" " ). new RusBoolNames(" " );

Слайд 37


Тесты … Вопрос: Какой вывод будет у этой программы?
Описание слайда:
Тесты … Вопрос: Какой вывод будет у этой программы?

Слайд 38


Тесты … Вопрос: Какой вывод будет у этой программы?
Описание слайда:
Тесты … Вопрос: Какой вывод будет у этой программы?

Слайд 39


Тесты … Вопрос: Что произойдет при попытке скомпилировать и исполнить нижеприведенный код?
Описание слайда:
Тесты … Вопрос: Что произойдет при попытке скомпилировать и исполнить нижеприведенный код?

Слайд 40


Тесты … Вопрос: Что произойдет при попытке скомпилировать и исполнить нижеприведенный код?
Описание слайда:
Тесты … Вопрос: Что произойдет при попытке скомпилировать и исполнить нижеприведенный код?



Похожие презентации
Mypresentation.ru
Загрузить презентацию