- •1.Тип данных “класс”. Объекты и классы.
- •Классы и объекты, понятие экземпляра класса, понятие членов класса
- •Виды классов
- •Классы в языке Object Pascal (среда Delphi)
- •2.Методы класса
- •3.Свойства класса и поля. Отличие свойства класса от полей записи.
- •4. Конструктор и деструктор класса.
- •Назначение конструктора
- •Виды конструкторов
- •Конструктор по умолчанию
- •Конструктор копирования
- •Конструктор преобразования
- •Виртуальный конструктор
- •Деструктор в Delphi
- •5.Использование разделов класса public, protected, published.
- •6. Использование наследования при создании класса.
- •Простое наследование
- •Множественное наследование
- •Delphi (Object Pascal)
- •7. Определение инкапсуляции.
- •8. Определение полиморфизма.
- •Примеры
- •В объектно-ориентированных языках
- •9. Динамическое создание объектов на форме с помощью классов.
- •10-13. Классы
- •14-16 StringGrid.
- •17. Процедуры работы с памятью. Приведите примеры.
- •18. Особенности работы процедур GetMem, BlockRead, функция FileSize .
- •19. Особенности работы процедуры new
- •20. Особенности работы процедуры FreeMem.
- •21. Стек. Локальные переменные и стек. Параметры процедуры и стек.
- •22. Списки. Динамическое создание очереди. Приведите примеры.
- •23. Компоненты работы с базами данных Table, Query, dbGrid, DataSource.
- •25. Занесение информации из базы данных в StringGrid.
- •Interface
- •Implementation
- •Implementation
- •26. Иерархические структуры. Деревья.
- •27. Использование компоненты TeeView для построения деревьев.
- •28. Рекурсия. Рекурсивные функции и процедуры. Рекурсия в программировании Функции
- •29. Выдача сообщений и отладка
- •Место отладки в цикле разработки программы
- •Инструменты
- •Инструменты, снижающие потребность в отладке
- •Оператор try...OnException..._try
- •31. Типы файлов. Операторы последовательного метода доступа.
- •32. Особенности обработки текстовых файлов.
- •33. Особенности работы с файлами с помощью прямого метода доступа.(!хз!)
- •34. Организуется диалогового поиска файлов. Компонента OpenDialog.
4. Конструктор и деструктор класса.
В объектно-ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) — специальный блок инструкций, вызываемый при создании объекта.
Конструктор схож с методом, но отличается от метода тем, что не имеет явным образом определённого типа возвращаемых данных, не наследуется, и обычно имеет различные правила для рассматриваемых модификаторов. Конструкторы часто выделяются наличием одинакового имени с именем класса, в котором объявляется. Их задача — инициализировать члены объекта и определить инвариант класса, сообщив в случае некорректности инварианта. Корректно написанный конструктор оставит объект в «правильном» состоянии. Неизменяемые объекты тоже должны быть проинициализированы конструктором.
Термин «конструктор» также используется для обозначения одного из тегов, описывающих данные в алгебраическом типе данных. Это использование несколько отличается от описываемого в статье. Для дополнительной информации смотрите Алгебраический тип данных.
В большинстве языков конструктор может быть перегружен, что позволяет использовать несколько конструкторов в одном классе, причём каждый конструктор может иметь различные параметры.
Назначение конструктора
Одна из ключевых особенностей ООП — инкапсуляция: внутренние поля объекта напрямую недоступны, и пользователь может работать с объектом только как с единым целым, через открытые (public) методы. Каждый метод, в идеале, должен быть устроен так, чтобы объект, находящийся в «допустимом» состоянии (то есть когда выполняется инвариант класса), после вызова метода также оказался в допустимом состоянии. И первая задача конструктора — перевести поля объекта в такое состояние.
Вторая задача — упростить пользование объектом. Объект — не «вещь в себе», ему часто приходится требовать какую-то информацию от других объектов: например, объектFile, создаваясь, должен получить имя файла. Это можно сделать и через метод:
Виды конструкторов
Некоторые языки программирования различают несколько особых типов конструкторов:
конструктор по умолчанию — конструктор, не принимающий аргументов;
конструктор копирования — конструктор, принимающий в качестве аргумента объект того же класса (или ссылку из него);
конструктор преобразования — конструктор, принимающий один аргумент (эти конструкторы могут вызываться автоматически для преобразования значений других типов в объекты данного класса).
Конструктор по умолчанию
Основная статья: Конструктор по умолчанию
Конструктор не имеющий обязательных аргументов. Используется при создании массивов объектов, вызываясь для создания каждого экземпляра. В отсутствие явно заданного конструктора по умолчанию его код генерируется компилятором (что на исходном тексте, естественно, не отражается).
Конструктор копирования
Основная статья: Конструктор копирования
Конструктор, аргументом которого является ссылка на объект того же класса. Применяется в C++ для передачи объектов в функции по значению.
Конструктор копирования в основном необходим, когда объект имеет указатели на объекты выделенные в куче. Если программист не создаёт конструктор копирования, то компилятор создаст неявный конструктор копирования, который копирует указатели как есть, то есть фактическое копирование данных не происходит и два объекта ссылаются на одни и те же данные в куче. Соответственно попытка изменения «копии» повредит оригинал, а вызов деструктора для одного из этих объектов при последующем использовании другого приведёт к обращению в область памяти, уже не принадлежащую программе.
Аргумент должен передаваться именно по ссылке, а не по значению. Это вытекает из коллизии: при передаче объекта по значению (в частности, для вызова конструктора) требуется скопировать объект. Но для того, чтобы скопировать объект, необходимо вызвать конструктор копирования.