- •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.Библиотека контейнерного класса структур данных.
42.Организация ввода-вывода для пользовательского типа
Хоть стандартные потоки и позволяют выводить только встроенные типы, эту проблему можно с легкостью обойти. Надо просто для класса, который мы хотим выводить в поток, определить дружественный оператор <<, у которого первый параметр и возвращаемое значение – поток, второй параметр - объект данного класса:
include <iostream.h>
include <conio.h>
class cVector{
public:
float x,y;
cVector( void ){x=1;y=2;}
friend ostream &operator<<( ostream& , cVector & );
};
ostream &operator<<( ostream & ostr , cVector &v ){
cout<<"x:"<<v.x<<endl;
cout<<"y:"<<v.y<<endl;
return( ostr );
}
int main( void ){
cVector v;
cout<<v<<endl;
getch();
return 0;
}
40.Параметризованные манипуляторы и форматирующие функции.
Манипуляторы являются функциями, которые можно включать в цепочку последовательных операций помещения и извлечения. Это удобный способ управления флагами потока. Однако, применение манипуляторов этим не ограничивается. Изменения, внесенные в поток манипулятором, сохраняются до следующего использования того же манипулятора, за исключением манипулятора setw.
Различают простые и параметризованные манипуляторы.
Параметризованные манипуляторы требуют при использовании спецификации аргументов:
setw(int) - задает значение внутренней переменной ширины поля;
setfill(int) - задает заполняющий символ;
setprecision(int) - задает значение внутренней переменной точности вещественных чисел;
setiosflags(long) - устанавливает флаги, биты которых заданы в переданном параметре;
resetiosflags(long) - сбрасывает флаги, биты которых заданы в переданном параметре.
Пример:
#include <iomanip.h>
void main()
{
cout << '(' << setw(4) << -12 << ") " <<
1234.56789 << ' ' <<
setiosflags(ios::scientific) << 1234.56789 << ' '
setiosflags(ios::fixed) << 1234.56789 << endl;
}
Результат: ( -12) 1234.57 1.234568e+03 1234.567890
К функциям форматирования относятся следующие функции класса ios:
width() - определения ширины поля;
fill() - определения символа-заполнителя;
precision() - определения точности чисел с плавающей точкой.
Определение ширины поля:
int width() - возвращает текущее значение внутренней переменной ширины поля потока;
int width(int) - устанавливает значение внутренней переменной ширины поля и возвращает предыдущее значение.
Определение символа-заполнителя:
char fill() - возвращает текущий символ-заполнителя;
char fill(char) - устанавливает символ-заполнитель и возвращает его предыдущее значение. Установленный символ используется вместо пробела для дополнения полей при выводе до указанной ширины
Определение точности чисел с плавающей точкой:
int precision() - возвращает текущее значение внутренней переменной точности;
int precision(int) - устанавливает значение внутренней переменной точности и возвращает предыдущее значение.
41.Состояния потока.
Каждый поток имеет связанное с ним состояние. Состояния потока описываются в классе ios в виде перечисления enum.
public:
enum io_state {
goodbit, // нет ошибки 0Х00
eofbit, // конец файла 0Х01
failbit, // последняя операция не выполнилась 0Х02
badbit, // попытка использования недопустимой операции 0Х04
hardfail // фатальная ошибка 0Х08
};
eof() возвращает true, если достигнут конец файла:
if ( inOut.eof() )
// отлично: все прочитано ...
bad() возвращает true при попытке выполнения некорректной операции, например при установке позиции за концом файла. Обычно это свидетельствует о том, что поток находится в состоянии ошибки;
fail() возвращает true, если операция завершилась неудачно, например не удалось открыть файл или передан некорректный формат ввода:
ifstream iFile( filename, ios_base::in );
if ( iFile.fail() ) // не удалось открыть
error_message( ... );
good() возвращает true, если все вышеперечисленные условия ложны:
if ( inOut.good() )
Флаги, определяющие результат последней операции объектом ios, содержатся в переменной state. Получить значение этой переменной можно с помощью функции int rdstate().
Кроме того, проверить состояние потока можно следующими функциями:
int bad(void); // 1, badbit или hardfail
int eof(void); // 1, если eofbit
int fail(void); // 1, если failbit, badbit или hardfail
int good(void); // 1, если goodbit
Если операция >> используется для новых типов данных, то при её перегрузке необходимо предусмотреть соответствующие проверки.