
- •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. Область применения, схема взаимодействия.
29. Шаблоны функций и шаблоны классов. Примеры.
Шаблоны функций и шаблоны классов есть дальнейшее развитие идеи макросов и перегруженных функций.
Шаблоны позволяют создавать параметризованные семейства функций и классов. Рассмотрим их использование на примерах.
Пример:
Шаблон функции для обмена значений объектов произвольных классов
#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
30. Наследование. Пример.
Наследованием называется процесс порождения одного класса от другого класса с сохранением и/или перекрытием свойств и методов класса-предка и добавлением, при необходимости, новых свойств и методов в классы-потомки.
Набор классов, связанных отношением наследования, называют иерархией классов или схемой наследования.
Пример наследования. Фигуры на экране.
Рассмотрим следующую схему наследования:
Общим свойством всех фигур на экране, независимо от их формы, является наличие координат (класс TLocation).
Любая фигура на экране должна “уметь” себя отобразить, скрыть своё изображение, а также перемещаться по экрану (класс TFigure).
enum
bool { false, true };
class TLocation {
protected:
int X, Y; // координаты фигуры на экране
public:
TLocation ( int a, intb ){X =a; Y =b;} // конструктор
int GetX ( ) { return X; } // получение координаты Х
int GetY () { return Y; } // получение координаты У
};
class TFigure : public TLocation { // абстрактная фигура-окружность
protected:
bool Vision; // признак видимости фигуры на экране
public:
TFigure ( int a, int b ) : TLocation ( a, b ) {} // конструктор
void Show ( ) {} // метод будет перекрыт у потомков класса
void Hide ( ) { } // метод будет перекрыт у потомков класса
bool IsVisible ( ) { return Vision; } // получение признака видимости
void MoveTo ( int newX, int newY ) { // перемещение фигуры по экрану
bool V = IsVisible ( ); // признак видимости фигуры
if ( V ) Hide ( ); // если фигура видима-скроем её
X = newX; Y = newY; //изменим координаты фигуры
if (V ) Show ( ); } // если фигура была видима-покажем её на новом месте
};
class TCircle : public TFigure { // конкретная фигура-окружность
int R; // радиус окружности
public:
TCircle ( int a, int b, intr): TFigure (a,b ){R=r;} // конструктор
void Show ( ) { // Перекрываем метод Show
// используем графические примитивы из GDI+ для Win32
// hdс - дескриптор контекста графического устройства
// hdc всегда известен для окна, в котором будем рисовать
Ellipse( hdc, X-R, Y-R, X+R, Y+R ); // рисует окружность
Vision = true; } //фигура видна
void Hide ( ) { // перекрываем метод Hide
// сохраним цвет текущего полотна(считаем, что фон полотна-белый)
HGDIOBJ pen = SelectObject(hdc,GetStockObject(DC_PEN));
SetDCPenColor(hdc, RGB(0,0,0) ); // установим белый цвет пера
Ellipse( hdc, X-R, Y-R, X+R, Y+R ); // отобразим круг цветом фона
SelectObject(hdc, pen ); // восстановим цвет текущего пера
Vision = false; } // фигура не видна
};
Обратите внимание на то, что метод MoveTo, разработанный для абстрактной фигуры TFigure, теперь будет работать для любой конкретной фигуры.