
- •1. Основные операции языка Си.
- •3. Язык Си: указатели и массивы. Определения, примеры.
- •4. Язык Си: объявления функций, передача аргументов. Примеры.
- •5. Язык Си: строки и указатели. Определения, примеры.
- •8. Язык Си: структуры. Пример.
- •9 . Язык Си: битовые поля и объединения. Примеры.
- •10. Язык Си: оператор определения типа. Примеры.
- •11.Язык Си: препроцессор. Директивы препроцессора, примеры
- •12.Язык Си: программный стек. Пример работы стека.
- •13. Линейные списки. Операции с линейными списками.
- •14 Hash-таблицы
- •15 Двоичные деревья
- •17. Язык Си: ссылочные типы. Пример.
- •18. Язык Си: защита указателей и объектов, неявное изменение объектов.
- •19. Язык Си: организация ввода/вывода. Пример: слияние файлов. Организация ввода/вывода
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •20. Язык Си: произвольный доступ к файлам. Пример.
- •22. Язык Си: примеры реализаций функций ввода/вывода (getc,putc).
- •23. Язык Си: примеры реализаций функций ввода/вывода (fgets, fputs).
- •24. Язык Си: работа с файловой системой. Пример.
- •25. Основные понятия ооп: абстракция, инкапсуляция, наследование, полиморфизм.
- •27. Объекты классов: статические,автоматические, динамические. Примеры.
- •28. Управление доступом к элементам классов. Пример.
- •29. Шаблоны функций и шаблоны классов. Примеры.
- •30. Наследование. Пример.
- •31. Множественное наследование. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •32. Виртуальные функции. Раннее и позднее связывание.
- •33. Абстрактные классы. Их назначение, пример.
- •34. Полиморфный контейнер (пример).
- •36. Конструкторы, их виды, примеры. Вызов конструкторов при наследовании.
- •37. Деструкторы. Их назначение, примеры.
- •39. Перегруженные операции. Примеры.
- •40. Обработка нештатных ситуаций. Объекты-исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •41. Модели жизненного цикла программного обеспечения. Модели жизненного цикла по
- •Спиральная модель жизненного цикла по.
- •42. Проектирование программного обеспечения и uml.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •43. Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •44. Сценарии выполнения прецедентов (пример).
- •45. Диаграммы классов. Нотация, семантика, отношения.
- •46. Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •47. Операции на диаграммах классов. Нотация и семантика. Примеры.
- •48. Отношения ассоциации на диаграммах классов.
- •Отношения ассоциации
- •Предприятие
- •Сотрудник
- •Отношения обобщения
- •Отношения композиции
- •53. Язык c#: сборки, манифесты, домены, компоненты.
- •55. Java как язык ооп для машинно-независимых приложений.
- •56. Обзор Java-технологий NetBeans ide.
- •57. Компонентные технологии разработки программного обеспечения.
- •59.Обёртки в языках c# и Java.
- •60. Архитектурный паттерн mvc. Область применения, схема взаимодействия.
17. Язык Си: ссылочные типы. Пример.
Ссылочные типы
Можно одному и тому же объекту давать несколько имен.
Наиболее часто ссылочные типы используются для передачи аргументов
“по ссылке”, при этом указатели явным образом не применяются.
Примеры:
int a = 1; //если b = 3, то значение a также станет равным 3
int &b = a; //b есть синоним (второе имя) переменной a
struct point { float x, y; }; //декартовы координаты точки на плоскости
void cartezian1 ( struct point* p, float r, float f ) //из полярных координат в декартовы
{ p->x = r * cos ( f ); p->y = r * sin ( f ); }
//или можно так:
{ (*p).x = r * cos ( f ); ( *p ).y = r * sin ( f ); }
//второй вариант - использует ссылочный тип и значения по умолчанию
void cartezian2 ( point& d, float r = 1., float f = 0.)
{ d.x = r * cos(f); d.y = r * sin ( f ); }
//обращение к функциям:
point z; //описана структурная переменная
cartezian1 ( &z, 1., 0. ); //без ссылочных типов, используем указатель
cartezian2 ( z ); //используем ссылочный тип, работаем с оригиналом аргумента
18. Язык Си: защита указателей и объектов, неявное изменение объектов.
Защита указателей и объектов
Ключевое слово const при описании объекта указывает на то, что значение данного объекта не может изменяться.
Пример:
const pi = 3.14; //это константа(используется вместо директива #define
const char* ps; //указатель на постоянный объект
const char s[5] = “abcd”; //постоянный массив символов
ps = s; //так можно
*( ps + 1 ) = “x”; //так нельзя, объект защищен от изменений
char* const ps = s; //постоянный указатель на объект
ps = “dcba”; //так нельзя, указатель защищен от изменения
*(ps + 2) = “z”; //так можно, защищен указатель на объект, а не сам объект
const char* const ps = s; //постоянный указатель на постоянный объект
//защита аргументов функции от изменения:
char* strcpy ( char* to, const char* from );
19. Язык Си: организация ввода/вывода. Пример: слияние файлов. Организация ввода/вывода
В Си нет операторов ввода/вывода. Это делает ядро языка независимым от аппаратуры компьютера. Операции ввода и вывода реализуются путем обращения к библиотечным функциям.
Вообще, стандартная библиотека Си есть собрание общеупотребительных и полезных функций. Они хранятся в библиотеке в откомпилированном виде, готовые к использованию. Чтобы компилятор мог контролировать правильность обращения к библиотечным функциям, в заголовочных файлах даны их прототипы.
Стандартная библиотека Си условно состоит из двух частей:
Под файлом (в узком смысле) будем понимать поименованную область долговременной
памяти компьютера.
Слово «файл» также употребляют, когда говорят о потоке данных, связанном с устройством ввода/вывода: клавиатурой, монитором, принтером, модемом, др.
Есть функции ввода/вывода высокого и низкого уровня.
Ввод/вывод высокого уровня унифицирован и использует абстракцию «поток».
Потоки имеют уникальные имена, когда они связаны с реальными устройствами.
В Си это достигается использованием так называемых указателей на файл.
В действительности указатель на файл есть указатель на структуру следующего вида:
typedef struct {
char *_ptr; // указатель на текущий байт в буфере ввода/вывода
int _cnt; // счетчик байтов в буфере ввода/вывода
char *base; // адрес буфера ввода/вывода
char _flag; // флаги доступа
char _fd; // дескриптор файла (для ввода/вывода низкого уровня)
} FILE;
В системе всегда имеется массив структур типа FILE:
extern FILE _iob [20]; // можно иметь открытыми до 20 файлов
К вашим услугам всегда есть несколько стандартных потоков ввода/вывода:
extern FILE *stdin; // стандартный поток ввода
extern FILE *stdout; // стандартный поток вывода
extern FILE *stderr; // для сообщений об ошибках (не буферизован)
extern FILE *stdaux; // резервный поток (не буферизован)
extern FILE *stdprn; // стандартный поток для печати
Эти потоки всегда открыты, их можно направлять на разные устройства.
Все прочие потоки нужно явным образом создавать (открывать файлы).