Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции С++.docx
Скачиваний:
4
Добавлен:
22.09.2019
Размер:
6.95 Mб
Скачать

Где перехватывать исключения?

  • там, где есть достаточно информации для обработки сбоя

  • с целью

    • обработать сбой

    • преобразовать исключение

    • соблюсти границы подсистем

17.03.2012

cppNewb.ru 42

Гарантии безопасности исключений

  • базовая гарантия

    • сбой может изменить состояние, не вызывает утечек и оставляет все объекты пригодными для дальнейшего использования

  • строгая гарантия

– сбой не

изменяет состояния (транзакция)

  • гарантия

– сбой не

бессбойности

может произойти

17.03.2012

cppNewb.ru

43

Сбои и повторное использование

  • устойчивость и цена разработки должны соответствовать решаемой задаче

  • требования к устойчивости неизвестны

  • сообщение пользователю

    • неизвестны доступные устройства вывода

    • неизвестно наличие пользователя

17.03.2012

cppNewb.ru 44

Объектно-ориентированное

программирование

с использованием C++

Полевой Дмитрий Валерьевич к.т.н., доцент КиК

e-mail: oop.misis@gmail.com

Символ

  • графическое начертание

  • код (числовое значение при хранении в памяти)

  • символьный набор (кодовая таблица)

24.03.2012

cppNewb.ru 2

Си-строка

  • массив символов заканчивающийся нуль-терминатором

  • источник постоянных ошибок

24.03.2012

cppNewb.ru 3

Проблемы манипуляции с Си-строками

  • низкоуровневая работа с массивом

  • отслеживание конца строки

  • отслеживание размера буфера

  • большое число функций

24.03.2012

cppNewb.ru 4

Кодовые таблицы и юникод

  • char и wchar_t

  • национальные таблицы

    • CP866, Win1251 и т.д.

  • Unicode (переменный размер)

    • UTF8

  • Unicode (фиксированный размер)

    • UTF16, UTF32

24.03.2012

cppNewb.ru 5

Символ

(стандартная библиотека)

  • класс-свойств

template<class Ch> struct char_traits;

char_type – тип символов

pos_type – целый тип, определяющий позицию в потоке

24.03.2012

cppNewb.ru 6

Строковый класс (std::string)

  • стандартная библиотека

  • стандарт не определяет конкретный способ хранения строк в памяти

  • стандарт допускает реализацию с подсчетом ссылок

24.03.2012

cppNewb.ru 7

Шаблонное объявление

template < class Ch,

class Tr = char_traits<Ch>,

class Al = allocator<Ch> > class basic_string;

typedef basic_string<char>

string;

24.03.2012

cppNewb.ru 8

Создание строки

  • пустая строка

пример:

string str();

  • инициализация строковым литералом

пример:

string str(“misis”);

  • копирование существующей

пример:

string str(strOld);

24.03.2012

cppNewb.ru 9

Инициализация строки символом

  • невозможна инициализация символом

пример:

//string(‘a’)

  • возможна инициализация несколькими экземплярами символа

пример:

string(‘a’, cnt)

24.03.2012

cppNewb.ru 10

Присвоение

  • assign

  • operator=

пример:

strFI.assign(str); strFI.assign(“”);

strFI

=

str;

strFI

=

“test

text”;

24.03.2012

cppNewb.ru 11

Размер строк

  • размер буфера

capacity

  • длинна строки

(без нуля) length size

  • резервирование

reserve

  • изменение длины (дополняется пробелами или усекается)

resize

24.03.2012

cppNewb.ru 12

Преобразование в С-строку

const Ch* c_str() const

    • записывает символы в массив, дополняя их финальным нулем

const Ch* data() const

    • записывает символы в массив

  • копирование из внутреннего буфера во внешний

copy

24.03.2012

cppNewb.ru 13

Присоединение к строке

  • append

  • operator+=

пример:

strFI.append(strFamilyName); strFI.append(“ ”);

strFI += strName;

24.03.2012

cppNewb.ru 14

Конкатенация строк

  • объединение содержимого строк

operator+

пример:

strFI = strFamilyName + string(“ “)

+ strName;

24.03.2012

cppNewb.ru 15

Вставка символов

  • вставка подстроки

пример:

strFI.insert(posName, name);

  • вставка с заменой

пример:

st.replace(pos, lnOld, lnNew, name);

    • вставка начинается перед указанной позицией

24.03.2012

cppNewb.ru 16

Поиск в строке

  • string::npos – при неудачном поиске

  • find

    • заданная группа символов

  • rfind

    • с конца, заданная группа символов

24.03.2012

cppNewb.ru 17

Поиск совпадающих

  • find_first_of

    • первый символ из заданной группы

  • find_last_of

    • последний символ из заданной группы

0224.1023.200192

cppNewb.ru 18

Поиск отличающихся

  • find_first_not_of

    • первый символ не совпадающий ни с одним из символов заданной группы

  • find_last_not_of

    • последний символ не совпадающий ни с одним из символов заданной группы

24.03.2012

cppNewb.ru 19

Доступ к символу

  • operator[]

    • по индексу без контроля выхода за границы

  • at

    • по индексу с контролем выхода за границы

    • при ошибке исключение std::out_of_range

0224.1023.200192

cppNewb.ru 20

Удаление символов

  • erase – удаление символов

  • clear – очистка строки

пример:

st.clear();

st.erase(lBeg, string::npos); st.erase(lBeg, lEnd – lBeg + 1);

24.03.2012

cppNewb.ru 21

Проверка на пустоту

  • empty

пример:

if (0 == str.empty())

// строка не пустая

{

//обработка

}

24.03.2012

cppNewb.ru 22

Потоковый ввод и вывод

  • вывод

operator<<

  • ввод

operator>>

24.03.2012

cppNewb.ru 23

Сравнение символов

  • лексикографическое сравнение

    • упорядочение в алфавите

    • упорядочение в кодовой таблице

  • символы нижнего регистра меньше символов верхнего

24.03.2012

cppNewb.ru 24

Сравнение строк

  • происходит лексикографическим сравнением символов до первого несовпадения

  • упорядоченность строк определяется порядком несовпадающих символов

24.03.2012

cppNewb.ru 25

Функции сравнение строк

  • operator==

  • operator!=

  • operator>

  • operator<

  • operator>=

  • operator<=

  • compare

24.03.2012

cppNewb.ru 26

Потоковый вывод и ввод

  • вывод – преобразование объектов (типа)

в последовательность символов

  • ввод – запрос последовательности символов и преобразование ее в объект (типа)

24.03.2012 cppNewb.ru 27

Тип потока

  • вывода (выходной)

    • ostream

  • ввода (входной)

    • istream

  • ввода и вывода (двунаправленный)

    • iostream

24.03.2012 cppNewb.ru 28

Заголовочные файлы

<iostream>

    • стандартные потоки

<fstream>

    • файловые потоки

<sstream>

    • строковые потоки

<iosfwd>

    • опережающие объявления

<iomanip>

    • манипуляторы

<streambuf>

    • буферы

24.03.2012

cppNewb.ru 29

Преимущества стандартной библиотеки ввода/вывода

  • контроль типов передаваемых данных

  • использование одного кода для работы с разными потоками (через полиморфизм)

  • расширяемость

    • ввод и вывод новых типов

    • новые классы потоков

24.03.2012 cppNewb.ru 30

Стандартные потоки

  • глобальные переменные

  • консольный ввод и вывод

    • cin и

cout

  • протоколирование ошибок

    • cerr

  • ведение логов

    • clog

24.03.2012 cppNewb.ru 31

Опережающее объявление

  • сокращает время компиляции

  • можно использовать для указателей и ссылок

пример:

// in comp.h class CStack;

bool compute(const CStack& stack);

24.03.2012 cppNewb.ru 32

Опережающее объявление потоков

// class ostream; // не сработает

namespace std { template<

class

Ch,

class

Tr

=

char_traits<Ch>

>

class basic_ostream;

typedef basic_ostream<char> ostream;

}

24.03.2012 cppNewb.ru 33