- •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. Область применения, схема взаимодействия.
36. Конструкторы, их виды, примеры. Вызов конструкторов при наследовании.
Конструктором называется функция-член класса, которая всегда вызывается при создании объектов класса. Назначение конструктора – привести объект в «рабочее» состояние. Например: получить необходимые ресурсы, открыть файлы, инициализировать данные, осуществить позднее связывание.
Имя конструктора должно совпадать с именем класса. Конструкторы не имеют возвращаемых значений. Конструкторы могут быть перегружены, как любая другая функция. Конструкторы не могут быть виртуальными функциями.
Существует три вида конструкторов: «нуль-конструктор (или конструктор по умолчанию)», «конструктор копирования» и конструктор общего вида.
Нуль-конструктор аргументов не имеет. Если в описании класса не было указано ни одного конструктора, нуль-конструктор создаётся автоматически.
Конструктор копирования имеет ровно один аргумент, который должен быть ссылкой на объект того же класса, что и создаваемый объект.
Все прочие конструкторы относятся к конструкторам общего вида.
Конструктор объекта явно или неявно вызывается всякий раз, когда объект создается, независимо от класса памяти объекта.
Конструкторы глобальных (внешних) объектов вызываются до того, как получит управление функция main(). Конструкторы объектов в динамической памяти вызываются операцией new. Конструкторы локальных объектов вызываются, когда становится активной область действия соответствующего объекта.
Для объектов классов, которые связаны отношениями наследования, порядок вызова конструкторов регулируется специальными правилами (см. далее).
Пример 1. Три вида конструкторов
class X { // виды конструкторов
………..
public:
X ( ) ; // 0-конструктор (конструктор по умолчанию)
X ( const X& ) ; // конструктор копирования
X ( int n = 0 ) ; // конструктор общего вида
};
void main ( void ) {
X one; // вызывается 0-конструктор
X two ( 1 ); // вызывается конструктор общего вида
X three = 1; // вызывается конструктор общего вида
X four = one; // вызывается конструктор копирования
X five ( two ); } // вызывается конструктор копирования
Выбор конкретного кода конструктора при создании объекта класса производится аналогично тому, как выбирается конкретный код при вызове перегруженных функций.
Основной принцип – сигнатура конструктора (т.е. количество и типы аргументов конструктора) должна соответствовать количеству и типам аргументов при вызове конструктора.
Если в классе нет ни одного конструктора, тогда автоматически создаётся и вызывается
0-конструктор («конструктор по умолчанию»).
Пример 2. Вызов конструкторов при наследовании
class Derived : Base1, virtual Base2 { ….. }; // два базовых класса
Derived X; // порядок вызова: Base2(); Base1(); Derived()
class Table { ….. } // некоторый класс
class A {
Table B; // вложенный объект
Table С; // вложенный объект
int n; // элемент данных
…..
public:
A ( int size ) ; //конструктор
~A ( ) ; }; //деструктор
A :: A ( int size ) : B ( size ), C ( size ) { n = size;} // список инициализации
Правила вызова конструкторов следующие:
1. Сначала вызываются конструкторы базовых классов, затем вызываются конструкторы производных классов (сначала создаются объекты-предки, затем объекты-потомки).
2. Конструкторы виртуальных классов (виртуальная схема наследования) запускаются ранее конструкторов прочих классов.
3. Для вложенных объектов и производных классов могут использоваться списки инициализации.