
- •Раздел 4. Разработка по Тема 4.1. Проектирование интерфейса с пользователем
- •4.1.1. Типы пользовательских интерфейсов.
- •4.1.2. Пользовательская и программная модели интерфейса.
- •4.1.3. Разработка диалогов.
- •4.1.4. Основные компоненты графических пользовательских интерфейсов.
- •Тема 4.2. Реализация графических пользовательских интерфейсов.
- •4.2.1. Диалоги, управляемые пользователем.
- •4.2.2. Диалоги, управляемые системой.
- •4.2.3. Использование метафор.
- •4.2.4. Технология Drag and Drop.
- •4.2.5. Интеллектуальные элементы.
- •4.3.1. Базовые типы данных.
- •Константы
- •Область действия имен
- •4.3.2. Указатели и адресная арифметика.
- •4.3.3. Составные типы данных. Структуры
- •Битовые поля
- •Определение типов
- •Перечислимые типы
- •4.3.4. Выражения и операции.
- •4.3.5. Управляющие конструкции. Условные операторы
- •Операторы циклов
- •4.4.1. Статические одномерные массивы.
- •4.4.2. Статические многомерные массивы.
- •4.4.3. Динамические массивы.
- •4.4.4. Массивы указателей.
- •4.5.1. Стеки.
- •4.5.2. Очереди.
- •4.5.3. Списки.
- •4.5.4. Бинарные деревья.
- •4.6.1. Объявление классов и экземпляров классов.
- •4.6.2. Инкапсуляция данных и методов.
- •4.6.3. Конструкторы классов.
- •Конструктор по умолчанию
- •Конструктор копирования
- •4.6.4. Деструкторы классов.
- •4.7.1. Разделы в описании класса.
- •4.7.2. Friend-конструкции.
- •4.7.3. Статические члены классов.
- •4.7.4. Использование описателя const в классах.
- •4.8.1. Вложенность классов.
- •4.8.2. Наследование данных и методов.
- •4.8.3. Типы наследования.
- •4.9.1. Полиморфизм раннего связывания.
- •4.9.2. Полиморфизм позднего связывания и виртуальные функции.
- •4.9.3. Абстрактные методы и классы.
- •4.10.1. Функции консольного ввода-вывода.
- •4.10.2. Функции файлового ввода-вывода.
- •4.10.3. Использование библиотеки классов потокового ввода-вывода.
- •4.11.1. Перегрузка операций.
- •4.11.2. Шаблоны функций.
- •4.11.3. Шаблоны классов.
- •4.11.4. Обработка исключений.
- •Тема 4.12. Com-технология.
- •4.12.1. Основные понятия.
- •4.12.2. Типы интерфейсов.
- •Свойства интерфейсов
- •Типы интерфейсов
- •4.12.3. Типы com-объектов.
- •4.12.4. Фабрика классов.
- •Тема 4.13. Построение com-сервера.
- •4.13.1. Язык idl.
- •Содержимое файла idl
- •4.13.2. Определение пользовательского интерфейса.
- •4.13.3. Реализация пользовательского интерфейса.
- •4.13.4. Создание тестового клиента.
- •Тема 4.14. Обзор платформы ms .Net.
- •4.14.1. Общая идея архитектуры .Net.
- •4.14.2. Достоинства и недостатки .Net.
- •4.14.3. Схема трансляции программ в .Net.
- •4.14.4. Язык msil.
- •4.14.5. Объектно-ориентированная модель .Net.
4.6.3. Конструкторы классов.
Среди всех методов любого класса выделяются два, которые определяют, каким образом объекты класса создаются, инициализируются, копируются и разрушаются.
Один из методов класса, называемый конструктором, выполняет особую функцию — он служит для автоматического создания и инициализации объекта класса в точке его определения. Конструктор носит то же имя, что и сам класс, в котором он определен. Конструктор ничего не возвращает в точку вызова, и при объявлении он не должен иметь описатель типа возвращаемого значения.
А::А(){}; определяет его конструктор. Напомним, что локально декларированные объекты класса, так же как и любые локальные переменные, действительны внутри функции или блока, где они определены.
Конструкторы и деструкторы наряду с характеристиками обычных методов обладают и некоторыми уникальными свойствами:
Конструктор всегда имеет то же имя, что и сам класс; это же относится и к деструктору, которому, однако, предшествует символ "~" (тильда).
Не имеют объявлений возвращаемых значений (даже void).
Не могут быть унаследованы, хотя производный класс может вызывать конструкторы и деструкторы базового класса.
Конструкторы, как и большинство функций C++, могут иметь аргументы по умолчанию или использовать списки инициализации элементов.
Деструкторы могут иметь атрибут virtual, а конструкторы нет.
Нельзя работать с их адресами.
Если конструкторы или деструкторы не были определены явно, они генерируются компилятором.
Конструктор нельзя вызывать как обычную функцию; вызов деструктора возможен с полностью уточненным именем.
При определении и разрушении объектов вызов конструкторов и деструкторов осуществляется автоматически.
Конструкторы и деструкторы, при необходимости выделения объекту памяти, могут выполнять неявные вызовы операций new и delete.
Прежде чем переходить к более подробному знакомству с этими специальными методами классов, рассмотрим правила, по которым происходит создание/уничтожение объектов:
Конструкторы и деструкторы автоматически запускаются всякий раз при создании и разрушении объектов.
Глобальные и локальные статические объекты создаются в начале выполнения программы — до того, как управление попадает в функцию main (или winMain). Уничтожение таких объектов происходит в момент завершения программы в результате возврата из функции main (winMain).
Локальные объекты создаются, когда программа встречает их определение, и уничтожаются при выходе из функции.
Конструктор объекта, память которому выделяется в куче (посредством операции new), вызывается автоматически, при вызове new; такой объект разрушается при явной передаче объекта в оператор delete.
Конструкторы подчиняются тем же правилам перегрузки, что и любые другие функции. Один и тот же класс может иметь несколько конструкторов, если каждый из них имеет свой собственный список аргументов. При определении объекта будет запущен тот конструктор, с которым совпадает заданный список аргументов.
В качестве аргумента конструктора нельзя использовать объект того же класса. Вместо этого можно использовать ссылку на объект.
Некоторые конструкторы играют особую роль.