- •99. Типы диаграмм языка uml
- •98. Унифицированный язык моделирования uml.
- •100. Диаграмма классов (class diagram).
- •Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
- •Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
- •Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).
- •102. Компонентно-ориентированное проектирование
- •Объектно-ориентированное проектирование на основе иерархии классов.
- •93. Гетерогенные контейнеры adt шаблонов
- •Компонентные классы как основа систем визуального программирования.
- •Построение каркасов приложений в среде современных систем программирования.
- •Производные классы: наследование.
- •Термин наследование и применение к классам и их характеристикам
- •Создание объекта производного класса.
- •Расширение производного класса.
- •Создание объекта производного класса и вызов конструкторов
- •Производные классы: полиморфизм.
- •Множественное наследование в классе, порождённом от нескольких родительских классов-предков.
- •Производные классы: полиморфная функция
- •Иерархия классов
- •39.Простые манипуляторы для управления потоком
- •Прядок вызова конструкторов в производных классах
- •Виртуальные базовые классы.
- •Порядок построения виртуальных базовых классов.
- •25. Указатель на абстрактный класс.
- •28.Технология объектно-ориентированного программирования.
- •Интерфейс пользователя и абстрактный класс.
- •35.Предопределенные объекты-потоки.
- •29. Применение шаблонов классов и шаблонов функций.
- •30.Объекты класса и указатели на объекты класса.
- •31.Члены данных объекта и указатели на члены данных класса.
- •32.Указатели на функции-члены класса и указатели на статические члены данных.
- •36.Стандартный ввод-вывод.
- •34.Создание и организация взаимодействие потоков ввода-вывода.
- •37.Методы позиционирования потоков.
- •38.Способы управления форматом выходных данных.
- •42.Организация ввода-вывода для пользовательского типа
- •40.Параметризованные манипуляторы и форматирующие функции.
- •41.Состояния потока.
- •43.Методы опроса и установки состояния потока.
- •44.Обработка ошибок в потоке через определение и установку состояния потока.
- •45.Последовательность действий при создании ostream.
- •46.Открытие и закрытие файла.
- •47.Методы ввода-вывода.
- •13.Преобразование типов в производных классах.
- •14.Разрешение области видимости в производных классах
- •15.Виртуальные функции.
- •16.Нестатические компонентные функции класса.
- •17.Применение виртуальных функций.
- •18.Вызов виртуальных функций в конструкторе.
- •19.Вызов полиморфных функций базового класса.
- •20.Вызов полиморфных функций через базовые классы.
- •21.Вызов виртуальной функции через таблицу виртуальных методов.
- •22.Ограничения на использование виртуальных функций.
- •23.Чистая виртуальная функция.
- •24.Абстрактный класс и его использование.
- •80.Контейнер объектов List
- •82.Контейнеры шаблонов fds (Fundamental Data Structures).
- •76.Класс итераторов объектов: внешние и внутренние итераторы.
- •81.Контейнер объектов Stack
- •71.Контейнерные классы объектов: понятие контейнерного класса.
- •72.Итераторы в контейнерных классах объектов как друзья класса.
- •48.Бинарные файлы.
- •49.Чтение бинарных файлов.
- •50.Запись в бинарные файлы.
- •51.Инициализация потоков с помощью конструктора.
- •52.Текстовые файлы для ввода-вывода.
- •60.Дружественные шаблоны.
- •53.Форматирование в памяти с использованием потоков strstream.
- •54.Шаблон класса.
- •69.Механизм обработки исключений.
- •56.Создание шаблонного класса.
- •57.Шаблон функции, объявление.
- •61.Функциональное замыкание при разработке приложений.
- •58.Запись шаблона функции с несколькими обобщенными аргументами.
- •65.Исключение как статический объект.
- •64.Объектно-ориентированный подход к обработке исключений.
- •66.Генерации исключения.
- •85.Гомогенные и гетерогенные контейнеры шаблонов fds.
- •63.Использование конструкторов и деструкторов в роли «вступления» и «заключения».
- •67.Операторы throw и catch.
- •68.Обработчик исключений.
- •70.Понятие контролируемого блока при обработке исключений.
- •84.Способы хранения элементов в контейнерах шаблонов fds.
- •83.Вектора и списки в контейнере шаблонов.
- •Стандартные контейнеры библиотеки stl
- •86.Fds контейнеры шаблонов векторов
- •62.Функциональное замыкание через наследование.
- •87.Fds контейнеры шаблонов списков
- •89.Способы реализации и префиксы имен adt-контейнеров шаблонов.
- •88.Контейнеры шаблонов adt (Abstract Data Types) и их классификация.
- •90.Типы adt-контейнеров шаблонов.
- •91.Массивы adt-контейнеров шаблонов.
- •92.Стеки adt-контейнеров шаблонов.
- •78.Контейнер объектов Array
- •74.Класс контейнеров объектов: разбиение контейнеров на группы.
- •77.Иерархия классов итераторов объектов
- •79.Контейнер объектов SortedArray
- •73.Библиотека контейнерного класса структур данных.
60.Дружественные шаблоны.
Обычно при объявлении дружественной конструкции, которая является экземпляром шаблона функции или класса, можно точно указать, что именно должно быть дружественным. Иногда, однако, желательно, чтобы дружественными по отношению к классу были все экземпляры шаблона. Отсюда вытекает понятие так называемого дружественного шаблона.
class Manager{
template<typename T>
friend class Task;
template <typename T>
friend void Shedule<T>::dispatch{Task<T>*};
template <typename T>
friend int ticket(){
return ++Manager::counter;}
static int counter;
}
Так же, как и в случае обычных объявлений дружественных конструкций, дружественный шаблон может быть определением, только если он именует неполное имя функции, за которым следуют угловые скобки. Дружественными шаблонами могут быть только первичные шаблоны и их члены. Любые частичные и иные специализации, связанные с первичным шаблоном, автоматически являются дружественными.
Шаблоны классов могут содержать друзей. Friend функция, не использующая спецификацию шаблона, будет универсальной friend для всех экземпляров шаблона класса. Friend функция, которая включает шаблоны параметров - особо friend только для того класса, экземпляр которого создается.
template <class T>
class matrix {
friend void foo_bar(); // универсальная
friend vect <T> product(vect <T> v); // создается экземпляр };
53.Форматирование в памяти с использованием потоков strstream.
Потоки реализованы отдельно от функций stdio. По этой причине при использовании в программе одновременно и потоков, vTstdio могут возникнуть проблемы. Если один символ выводится потоковой операцией, а другой — функцией stdio putc (...), то порядок появления символов может быть нарушен из-за внутренней буферизации и автоматической сброски буфера.
форматирование в памяти
Очень часто данные нужно форматировать, не отображая их на экране. Для этого в ANSI С используется функция sprintf (...). Форматированные данные сохраняются в буфере памяти для последующей обработки. Библиотека потоков содержит класс форматирования в памяти под названием strstream, который можно использовать и для извлечения, и для вставки. В листинге 7.24 приведен полный пример, который показывает, что с strstream можно работать так же, как и с fstream, используя операторы вставки, манипуляторы и динамическую буферизацию.
Листинг 7.24. Использование strstream для форматирования данных в памяти
#include <iostream.h>
#include <strstrea.h>
#include <iomanip.h>
#include <fstream.h>
#include <stdlib.h>
void main() <
// создание пустого strstream. Память будет выделена
// динамически, по мере необходимости
strstream buffer;
// создаем несколько переменных
int number =30; char* color = "RED"; float weight = 135.96;
// строим в strstream форматированную строку
buffer << "\nThere are " << number;
buffer << "chairs that are " << color;
buffer << ", with a total weight of ";
buffer << setprecision(2) << weight << "kilos.";
// открытие файла
ofstream report("report.doc");
if(!report)
{
cerr << "Can't open the report file.";
exit(l); }
// сохранение данных в файле
report << buffer.rdbuf(); }
В листинге 7.24 показан объект strstream, используемый для построения форматированной строки, которая затем сохраняется в текстовом файле. Файл REPORT.DOC будет содержать следующую строку:
There are 30 chairs that are RED, with a total weight of 135.96 kilos.
Для извлечения данных из форматированной в памяти строки используется класс istrstream.
Вначале нужно создать объект istrstream и ассоциировать его с буфером, содержащим извлекаемые данные. Затем данные извлекаются из потока с помощью обычных операций. Небольшой, но полный пример приведен в листинге 7.25.
Листинг 7.25. Использование istrstream для извлечения данных, форматированных в памяти
#include <iostream.h>
#include <strstrea.h> *
void main(int argc, char** argv) {
istrstream argument(argv[0]);
cout << "\nThere are " << argc
<< " arguments. The first was " << argument.rdbuf(); }
В приведенном примере для инициализации объекта istrstream используется argv[0]. Потоки, как правило, более удобны в обращении, чем простые символьные массивы, так как они гибче, имеют встроенную обработку указателей, динамическое распределение памяти и т.д. Если программы интенсивно работают со строками, то неплохо было бы обдумать переход к strstream или к стандартному классу C++ string, чтобы избавиться от старых ANSI-функций манипулирования строками.