|
Программирование >> Аргументация конструирования
public: TutorPair () cout Конструируем Tutor Pair\n ; noMeetings = 0; protected: Studenc student; Teacher teacher; int noMeetings; in (int argc, char* pArgs [ ] ) { TutorPair tp; cout Возвращаемся в inain()\n ; return 0; В результате работы этой программы на экран будут выведены следующие сообщения: Конструируем Student КонструируемTeacher KoHCTpynpyeMTutorPair Возвращаемся в main{) Создание объекта tp в main;) вызывает конструктор TutorPair автоматически. Перед тем как управление будет передано телу конструктора TutorPair, вызываются конструкторы для объектов-членов student и teacher. Конструктор student вызывается первым, поскольку объект этого класса объявлен первым. Затем вызывается конструктор Teacher. И только после создания этих объектов управление переходит к конструктору класса TutorPair, который теперь может конструировать оставшуюся часть объекта. Это не означает, что TutorPair отвечает за инициализацию объектов student и teacher. Каждый класс отвечает за инициализацию своего объекта, где бы тот не создавался. Объекты класса уничтожаются так же, как и создаются. Если класс может иметь конструктор для выполнения начальных установок, то он может содержать и специальную функцию для уничтожения объекта. Такая функция-член называется деструктором. Зачем нужен деструктор Класс может затребовать для своего объекта некоторые ресурсы с помощью конструктора; эти ресурсы должны быть освобождены при уничтожении объекта. Например, если конструктор открывает файл, перед окончанием работы с объектом класса или программы этот файл следует закрыть. Возможен и другой вариант: если конструктор берет память из кучи, то она должна быть освобождена перед тем, как объект перестанет существовать. Деструктор позволяет делать это автоматически, не полагаясь на вызов необходимых функций-членов в программе. Работа с деструкторами Деструктор имеет то же имя, что и класс, но только с предшествующим ему символом тильды (-) (C++ последователен и здесь: ведь символ тильды не что иное, как символ оператора нет , т.е. деструктор - это отрицание конструктора). Как и конструктор, деструктор не типа возвращаемого значения. С учетом сказанного деструктор класса Student будет выглядеть так: class public; Stucent() semesterHours = 0; gpa = 0.0; -Student 0 любые используемые ресурсы освобождаются здесв мотальные откр1т1е члены... protect ed: int semesterHours; fleet gpa; Деструктор вызывается автоматически, когда объект уничтожается или, если говорить языком C+ + , происходит его деструкция. Чтобы избежать тавтологии ( деструктор вызывается для деструкции объекта ), я по возможности старался не применять этот термин. Можно также сказать когда объект выходит из области видимости . Локальный объект выходит из области видимости, когда функция, создавшая его, доходит до команды return. Глобальный или статический объект выходит из области видимости, когда прекращается работа программы. Если уничтожается более одного объекта, деструкторы вызываются в порядке, обратном вызову конструкторов. То же касается и случая, когда уничтожаемый объект содержим Далее приведена программа TutorPair, использующая де- структоры. ttincluQc <stdio.h> #include st ream.h> class Student { public: Student () cout Конструируем Student\n ; semesterHours = 0; gpa = 0.0; -Student 0 cout << Уничтожаем Student\n ; альные открытые члены.. . protected: int: semesterHours ; float gpa; c:lass Teaser I oublic: { Teacher () } cout Конструируем Teacher\n ; -Teacher () ) },- cout << Уничтожаем Teacher\n ; class TutorPair i publiс: TutorPair () { cout << Конструируем Tutor?air\n ; } noMeetings 0 ; -TutorPair (} ) cout << Уничтожаем TutorPairW; protected: Student s; Teacher i.nt noMeetings ; in in (in gcs, char* pArgs [ ] ) { TutorPair tp; cout Возвращаемся в main()\n ; return 0; Если вы запустите эту профамму, на экран будуг выведены следующие сообщения: Koi-струкруем Student Конструируем Teacher Конструируем TutorPai г Возвращаемся в mainO Уничтожаем TutorPair Уничтожаем Teacher Уничтожаем Student Как видите, конструктор класса TutorPair вызывается при объявлении tp, а деструктор - перед завершающей скобкой функции mam О . Порядок вызова деструкторов порядку вызова конструкторов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |