- •1)Стандартные операции языка Си.
- •2)Линейные списки, операции с линейными списками.
- •3)Модели жизненного цикла по
- •Итерационная модель
- •Спиральная модель жизненного цикла по
- •II билет)
- •1)Обработка нештатных ситуаций. Объекты исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •2) Основные понятия ооп: абстракция, инкапсуляция, наследование, полифморфизм
- •3)Диаграммы классов. Нотация, отношения.
- •III билет)
- •1)Язык Си: указатели и массивы. Определения, примеры.
- •2)Абстрактные классы. Их назначение, пример.
- •3)Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •IV билет)
- •1)Язык Си: объявление функций, передача аргументов. Примеры.
- •2)Язык Си: Работа с файловой системой. Примеры.
- •3)Сценарий выполнения прецедентов(пример).
- •V билет)
- •1)Язык Си: строки и указатели. Определения, примеры.
- •2)Язык Си: Низкоуровневый ввод/вывод. Пример.
- •3) Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •VI билет)
- •1)Язык Си: аргументы командной строки. Перегруженные функции. Примеры.
- •2)Альтернативное определение ооп.
- •3)Операции на диаграммах классов. Нотация и семантика. Примеры.
- •VII билет)
- •1)Язык Си: организация ввода/вывода. Пример: слияние файлов.
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •2)Объекты классов. Статические, автоматические, динамические. Примеры.
- •3)Полиморфный контейнер(пример).
- •VIII билет)
- •1)Язык Си: структуры. Пример.
- •2)Управление доступом к элементам классов. Пример.
- •3)Двоичные деревья. Алгоритмы обхода, поиска, вставки, сортировки.
- •IX билет)
- •1)Язык Си: Произвольный доступ к файлам. Пример.
- •2) Конструкторы и деструкторы. Их виды. Вызов конструктора при наследовании Примеры.
- •3)Проектирование по и uml. Основные понятия.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •X билет)
- •1)Язык Си: оператор определения типа. Примеры.
- •2)Наследование классов. Пример с Абстрактными фигурами.
- •XI билет)
- •1)Язык Си: Препроцессор. Директивы препоцессора. Примеры.
- •2)Множественное наследование. Виртуальная схема наследования. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •3)Шаблоны Функций и шаблоны классов. Примеры.
- •XII билет)
- •1)Язык Си: программный стек. Пример работы стека.
- •2)Виртуальные функции. Раннее и позднее связывание.
- •3)Hash-таблицы(Таблицы с перемешиванием).
XI билет)
1)Язык Си: Препроцессор. Директивы препоцессора. Примеры.
Препроцессор - текстовый процессор, который просматривает
исходный текст до компиляции и решает три задачи:
обрабатывает символические имена;
отыскивает и вставляет файлы;
осуществляет условную компиляцию.
Директивы #define и #undef
формат: #define <имя> <текст>
#define <имя> (<список-параметров>) <текст> // это макрос
#undef <имя>
примеры:
#define LENGTH 80
#define ABS(X) ((X) > 0 ? (x): -(x))
#define MAX (x, y) ((x) > (y) ? (x) : (y))
Зачем нужны скобки? Потому что возможны побочные эффекты, например
#define MAX(a, b + c) (a > b + c ? a : b +c)
#define ABS(++p) (++p > 0 ? ++p: -++p)
Директива #include
формат: #include <имя-пути>
#include “имя-пути”
примеры:
#include <iostream> // ищет файл в стандартных директориях
#include “c:file1.h” // ищет файл в конкретной директории
#include “file2.h” // ищет файл в текущей директории
Условная компиляция реализуется с помощью следующих директив:
#if #elif #else #endif defined undef
формат: #if <константное-выражение-1> [<текст-1>]
[ #elif <константное-выражение-2> [<текст-2>]]
[ #elif <константное-выражение-3> [<текст-3>]]
……………………………………………………..
[ #else [<текст-n>]]
#endif
Такие конструкции часто используются при инсталляции и настройке программных продуктов
пример:
#if (sizeof(void*) == 2) # define _SMALL_
#elif (sizeof(void*) == 4) # define _LARGE_ // модель памяти
#else printf(“?”);
#endif
пример:
#if (defined(_SMALL_) && undef(_LARGE_))
#include “file.h”
#endif
Популярные макросы для работы с символами находятся в файле <ctype.h>:
isalpha(c) - символ есть буква?
isdigit(c) - символ есть цифра?
isalnum(c) - символ есть буква или цифра?
isspace(c) - пробельный символ(пробелы, табуляция, перводы строки)?
islower(c) - символ нижнего регистра?
isupper(c) - символ верхнего регистра?
…………………………………………………..
2)Множественное наследование. Виртуальная схема наследования. Пример.
Множественное наследование означает, что у классов-потомков может быть более, чем один непосредственный класс-предок. В С++ такое допускается. Рассмотрим некоторый визуальный объект, который представляет собой текстовую строку, заключенную в окружность. Построим схему наследования:
Поскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
В результате такой схемы наследования, все данные и методы класса TLocation будут представлены в итоговом классе Text_in_Circle в двух экземплярах.
Возникает неоднозначность: каким экземпляром данных пользоваться?
Данная неприятная ситуация преодолевается в С++ путем применения виртуальной схемы наследования (о ней позже).
3)Шаблоны Функций и шаблоны классов. Примеры.
Шаблоны функций и шаблоны классов есть дальнейшее развитие идеи макросов и перегруженных функций.
Шаблоны позволяют создавать параметризованные семейства функций и классов. Рассмотрим их использование на примерах.
Пример:
Шаблон функции для обмена значений объектов произвольных классов
#include <stdio.h>
//опишем шаблон функции _swap
template <class T> void _swap ( T& a, T& b ) { T temp = a; a = b; b = temp; }
//протестируем работу шаблона функции _swap
void main ( void ){
int n = 0, m = 1;
float x = 0., y =1.;
char *s1 = “one”, *s2 = “two”;
_swap( n, m ); //обменяем значения объектов типа Int
_swap( х. у): //обменяем значения объектов типа float
_swap( s1. 52 ): //обменяем значения объектов типа char*
printf(“%i %f %s\n”, n, x, s1); //посмотрим результаты работы
} //шаблона функции _swap