Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ппвис 2 часть с++.doc
Скачиваний:
26
Добавлен:
01.03.2016
Размер:
265.22 Кб
Скачать

13. Инициализация объектов классов. Назначение, типы конструкторов.

Описание объекта задает тип (имя класса) и, возможно, необходимые для инициализации членов-данных значения. При объявлении объекта компилятор получает указание на создание переменной класса на основании заданного типа. Когда объект объявляется, то согласно описанию класса для объекта происходит выделение оперативной памяти, а также при указании значений данных осуществляется инициализация членов-данных указанными значениями. Всю эту работу делает специальный метод класса, называемый конструктором.

имя_класса имя_объекта ;

имя_класса имя_объекта(список параметров) ;

имя_класса имя_объекта(имя_объекта_копирования) ;

У конструктора имя класса и обязательно открытый спецификатор памяти. Конструктор управляет построением объекта в оперативной памяти. Процесс построения включает в себя выделение памяти для членов-данных типа указателей, а также инициализацию данных. Конструктор никогда не возвращает никакого значения и не имеет типа. Количество конструкторов не ограничено

14. Инициализация объектов классов. Описание конструкторов.

Главной задачей конструкторов класса является инициализация данных создаваемых им объектов. Однако производить инициализацию данных при помощи оператора присваивания в теле конструктора не рекомендуется. инициализация – присвоение объекту начального значения.

Конструктор по умолчанию.

Конструктор по умолчанию – конструктор, не требующий параметров. Этот конструктор всегда должен быть для любого класса. Конструктор по умолчанию может не выполнять никаких действий, но чаще всего он инициализирует данные класса нулевыми значениями.

Объявление: public: имя_класса();

Пример:

CBook::CBook () {m_name=””;m_ page=0;}

Конструктор с параметрами:

Конструктор с параметрами инициализирует значения данных объектов значениями полученных параметров. Параметров будет столько, сколько данных необходимо проинициализировать. Прототип такого конструктора имеет формат: public: имя_класса (список формальных параметров);

Пример:

СBook:: CBook (char *autor, int page )

{ strcpy(m_autor, autor);

m_page=page;

}

Конструктор копирования:

Конструктор копирования создает копию объекта в оперативной памяти с помощью другого объекта того же класса. В качестве параметра этот конструктор получает ссылку на объект, копию которого необходимо создать. Протип: public: имя_класса (имя_класса);

Пример:СBook:: CBook(CBook &obj)

{ strcpy(m_autor, obj.m_autor);

m_page=obj.m_page;}

15. Особенности описания и использования конструкторов копирования.

Конструктор копирования создает копию объекта в оперативной памяти с помощью другого объекта того же класса. В качестве параметра этот конструктор получает ссылку на объект, копию которого необходимо создать. Протип: public: имя_класса (имя_класса);

Пример:

СBook:: CBook(CBook &obj)

{ strcpy(m_autor, obj.m_autor);

m_page=obj.m_page;

}

Конструктор копирования необходим, если в классе есть члены, которые используют динамическую область памяти. Есть данные которые не хранятся в области класса. Если не описан конструктор копирования, то система как бы сама генерирует такой конструктор. Такой конструктор выполняет побитовое копирование.

Есть ряд ситуаций, когда такое поразрядное копирование приводит к ошибкам:

  1. При создании нового объекта инициализированного уже имеющимся.

  2. Передача в функцию объекта класса по значению – создается копия передаваемого аргумента, если это объект, то по завершении функции автоматически вызовется деструктор. При этом деструктор может удалить данные в динамической области, которые необходимы для исходного объекта.

  3. Связана с вызовом функций. Вызываемая функция возвращает объект по значению. При возврате в return результата автоматически генерируется временный объект для хранения возвращающего значения, а сам объект удаляется после завершения работы функции – автоматически вызывается деструктор – уничтожение данных необходимо объекту, которому присваивается значение вызываемой функции.

  4. Когда 2 объекта данного класса участвуют в операторе присваивания.