Cтраница 3
Множественное наследование указывается двоеточием (:) после имени производного класса и перечислением списка разделенных запятыми базовых классов после двоеточия. Для вызова конструкторов базового класса в конструкторе производного класса используется список инициализаторов элементов. [31]
Для инициализации переменных ссылочных типов необходимо вызывать конструкторы. Поскольку до вызова конструктора переменная ссылочного типа содержит значение nil, работать с этой переменной до ее инициализации нельзя. Переменные ссылочных типов не уничтожаются сразу, как только выходят из области видимости. Высвобождение занимаемой ими памяти выполняется сборщиком мусора по мере необходимости, и эта память вообще может не высвобождаться до конца работы программы. Для гарантированного высвобождения критических ресурсов в ссылочных типах реализован механизм финализации, который отсутствует в размерных типах. [32]
Заметим, что конструктор копии должен использовать вызов по ссылке, а не вызов по значению. В противном случае вызов конструктора копии приведет к бесконечной рекурсии, потому что при вызове по значению должна быть создана копия объекта, передаваемого конструктору копии, что приводит снова к вызову конструктора копии. [33]
В строке 29 создается экземпляр описанного класса, который размешается в стеке. При этом происходит неявный вызов конструктора класса SimpleCat. В этом случае также вызывается конструктор. При выходе из функции переменная Frisky оказывается за пределами области видимости и для нее также вызывается деструктор. [34]
Точно так же как класс может иметь пользовательский ( измененный) конструктор, он может иметь пользовательский деструктор - метод, объявленный с ключевым словом destructor, и вызываемый по имени Destroy. Так же, как вызов конструктора выделяет память для объекта, вызов деструктора освобождает память. Деструкторы нужны только для объектов, которые запрашивают внешние ресурсы у своих конструкторов или во время существования. Можно написать новый деструктор, полностью подменяющий стандартный деструктор Destroy, позволив объекту выполнить некоторую очистку прежде, чем он сам будет разрушен. [35]
Операции с файлами могут выполняться с помощью потоков класса TFileStream, являющегося наследником TStream. Создание такого потока осуществляется вызовом конструктора TFileStream. [36]
Поскольку производный класс наследует элементы базового класса, то при создании объекта производного класса должен быть вызван конструктор базового класса для задания начальных значений элементам базового класса, содержащимся в объекте производного класса. В конструкторе производного класса при явном вызове конструктора базового класса может быть предусмотрен список инициализаторов элементов; в противном случае конструктор производного класса будет неявно вызывать конструктор базового класса с умолчанием. [37]
До вызова метода Create базового класса свойства формы не загружаются и внутренние компоненты недоступны. Поэтому обычный подход включает: сначала вызов конструктора базового класса и затем - выполнение пользовательских операций. [38]
Если говорить в общем, конструктор вызывается при создании объекта, а деструктор - при его уничтожении. В следующем списке подробно перечислены случаи вызова конструкторов и деструкторов для различного вида объектов. [39]
Когда создается объект производного класса, сначала работает конструктор базового класса, затем конструкторы для объектов - элементов производного класса и, наконец, конструктор производного класса. Деструкторы вызываются в порядке, обратном вызовам соответствующих конструкторов. [40]
И в первом, и во втором присваивании компилятор в первую очередь преобразовывает константу в объект класса CCurrency, используя соответствующий конструктор преобразования, а затем присваивает его объекту Bucks класса CCurrency. Символ L во втором операторе присваивания необходим для исключения неоднозначного вызова конструктора преобразования. [41]
Структура меню, которая была создана в редакторе меню до вызова Конструктора, останется без изменений. [42]
Далее представлено содержимое файла, в котором располагаются три объекта-прямоугольника и два объекта-линии в следующем порядке: прямоугольник, линия, прямоугольник, прямоугольник и линия. Информация о типе объекта содержит только имя соответствующего класса, по которому и происходит вызов нужного конструктора во время исполнения программы, причем только один раз, далее тип определяется номером, указанным в ссылке. [43]
Явно инициализируйте объекты - элементы данных посредством инициализаторов элементов. Это устраняет накладные расходы, связанные с двойной инициализацией элементов-объектов, - первый раз при вызове конструктора по умолчанию для объекта - элемента данных и снова при инициализации элемента с помощью set - функций. [44]
Строки 3 и 4 соответствуют созданию объекта rover, а строки 5 и 6 - объекта buster. Обратите внимание, что в последнем случае из конструктора класса Dog с двумя целочисленными параметрами происходит вызов конструктора класса Mammal, содержащего один целочисленный параметр. [45]