- •Объект, класс. Понятие, примеры
- •Структура класса, использование классов
- •Причины возникновения ооп
- •Технология применения ооп при разработке и реализации ис
- •Абстрагирование в ооп, инкапсуляция – понятие и примеры
- •Наследование в ооп, понятие и примеры
- •Модульность в ооп, связность и связанность
- •Иерархия в ооп, полиморфизм, определения и примеры
- •Диаграмма классов, нотация uml
- •Технология руп - базисная структура и принципы Структура продукта процесса
- •Итерация руп, структура и цели итерации
- •Цели и задачи моделирования бизнес – процессов в руп
- •Структура модели бизнес – процесса в руп, пример
- •Требования в руп, формирование и анализ, примеры
- •Use Case моделирование, субъекты, роли и прецеденты Субъекты
- •Прецеденты
- •Логическое представление руп, понятие и примеры
- •Представление выполнения руп
- •Объекты и классы в руп Объекты
- •Этап руп «Анализ и проектирование», общие понятия и задачи этапа
- •Технология Use Case. Основные принципы, примеры.
- •Диаграмма последовательности, определение и примеры.
- •Инструментальная среда поддержки руп
- •Структура системы Enterprise Architect
- •Формирование моделей бизнес – процессов в еа
- •Формальные требования в еа, структура и формирование
- •Моделирование функций системы в еа
- •Структура динамической модели в еа
- •Диаграмма состояния в еа
- •Диаграмма деятельности в еа
- •Диаграмма последовательности в еа
- •Потоки деятельности в еа
- •Создание Case-проекта в Enterprise Architect.
- •Диаграммы реализации в еа
- •Что такое конструктор и для чего он нужен, Какие типы конструктора существуют
- •Деструктор, назначение деструктора.
- •Методы класса, наследование и перекрытие методов.
- •Статические компоненты класса
- •Шаблоны классов, библиотека mfc
- •Списки, технология списков, операции вставить, удалить узел списка
- •Технология связных списков
- •Класс List, свойства и методы класса
- •Абстрактный список, операции над списками в классе List
-
Что такое конструктор и для чего он нужен, Какие типы конструктора существуют
В объектно-ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) — специальный блок инструкций, вызываемый при создании объекта, причём или при его объявлении (располагаясь в стеке или в статической памяти, что допустимо в C++, но не в Java и некоторых других объектно-ориентированных языках) или динамически располагаясь в куче при использовании ключевого слова new.
Конструкторы часто выделяются наличием одинакового имени с именем класса, в котором объявляется. Их задача — инициализировать члены объекта и определить инвариант класса, сообщив в случае некорректности инварианта. Корректно написанный конструктор оставит объект в 'правильном' статусе. Неизменяемые объекты тоже должны быть проинициализированы конструктором.
Виды конструктора:
void main()
{ //вызов конструктора без параметров для создания объекта a:
person a;
//вызов конструктора с параметрами для создания объекта b:
person b("Abram",1977);
//вызов конструктора копирования для создания объекта c:
person c = b;
//вызов конструктора с параметрами для безымянного объекта
//и вызов конструктора копирования для определения объекта d:
person d = person("Gurgen",1942);
//вызов конструктора без параметров для создания безымянного
//объекта, размещаемому по адресу, хранящемуся в указателе pp1:
person* pp1 = new person;
//вызов конструктора с параметрами для создания безымянного
//объекта, размещаемого по адресу, хранящемуся в указателе pp2:
person* pp2 = new person("Ivan",1978);
//вызов конструктора копирования для возврата значения функцией
person e = set_info();
//вызов конструктора копирования для создания объекта-параметра //функции:
print(a); print(b); print(c); print(d);
print(*pp1); print(*pp2); print(e);
}
-
Отличие конструктора копирования от операции присваивания в С++
Копирующий конструктор предназначен для создания нового объекта по подобию уже существующего, но это не то же самое, что и копирующий оператор присваивания. Тот должен правильно работать с уже созданным объектом.
-
Деструктор, назначение деструктора.
Если создание объекта подразумевает выделение каких-либо ресурсов, то таким классам требуется функция, которая освободит ресурсы, выделяемые конструктором. Такая функция называется деструктором, она будет автоматически вызвана при уничтожении объекта.
Деструктор не имеет параметров и возвращаемого значения. Вызов деструктора выполняется неявно, при уничтожении объекта класса.
Если в классе деструктор не определен явно, то компилятор генерирует деструктор по умолчанию, который просто освобождает память, занятую данными объекта. В тех случаях, когда требуется выполнить освобождение ресурсов, выделенных конструктором, необходимо определить деструктор явно.
Деструктор вызывается автоматически, когда объект удаляется из памяти:
-
для локальных объектов это происходит при выходе из блока, в котором они объявлены;
-
для глобальных — как часть процедуры выхода из main;
-
для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.
Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса.
Свойства деструктора:
-
не имеет аргументов и возвращаемого значения;
-
не наследуется;
-
не может быть объявлен как const или static (см. далее);
-
может быть виртуальным (см. далее).
Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор.
Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически — иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.
Деструктор для рассматриваемого примера будет выглядеть так:
//реализация деструктора для экземпляра класса
person::~person()
{
delete [] name;
}
Без необходимости явно вызывать деструктор объекта не рекомендуется.
-
Наследование классов в С++
Наследование – это такое отношение между классами, когда один класс частично или полностью повторяет структуру и поведение другого класса (одиночное наследование) или других (множественное наследование) классов. Наследование устанавливает между классами иерархию "общее-частное".
Связи наследования также называют обобщениями (generalization) и изображают в виде больших белых стрелок от класса-потомка к классу-предку
Рассмотрим учет сотрудников организации. Каждый сотрудник – это, прежде всего, человек. Студент, работник, руководитель – частные случаи объекта "человек", определяющего общие характеристики для всех своих разновидностей. Организация этих понятий в иерархию позволяет избежать повторения кода и обращаться с объектами производных классов как с объектами базового.
Возьмем за основу иерархии класс person, немного изменив его структуру ради соответствия концепции наследования. Поскольку для всех объектов кадровой структуры требуется знать имя, фамилию, а также год рождения для определения возраста, объявим данные атрибуты как protected, заменив заодно тип представления имени и отчества на более удобный в работе тип string.
class person
{
public:
void set_year(int value);
const int get_year() const;
void set_sirname(string& value);
const string& get_sirname() const;
void set_name(string& value);
const string& get_name() const;
protected:
string name;
string sirname;
int year;
};