C++ Конструктор и деструктор класса
Конструктор класса
КлассКонструкторКонструктор — это специальная функция-член класса, автоматически выполняемая каждый раз при создании нового объекта класса.
Имя конструктора точно совпадает с именем класса, и он не имеет возвращаемого типа (дажеvoidозначает, что b — это массив объектов класса AB, содержащий 3 объекта; следовательно, конструктор вызывается 3 раза;
означает, что p — это массив указателей на объекты класса AB, содержащий 4 указателя на объекты класса; конструктор не вызывается.
Следующий пример помогает лучше понять концепцию конструкторов:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Object is being created Length of line : 6
Параметризованные конструкторы
Конструктор по умолчанию не имеет параметров, но при необходимости конструкторы также могут иметь параметры. Таким образом, начальные значения присваиваются объекту при его создании без необходимости отдельного вызоваsetфункции, как показано в следующем примере:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Object is being created, length = 10 Length of line : 10 Length of line : 6
Использование списков инициализации для инициализации полей
C++ рекомендует использоватьсписок инициализации членовдля инициализации переменных-членов. Его синтаксис — добавить двоеточие после списка параметров конструктора,:), затем напишитеmember variable name (initial value)。
В следующем примере,: length(len)означает: использовать переданный параметрlenдля непосредственной инициализации переменных-членовlength. ПримечаниеcoutВыводится переменная-членlength, а не параметрlenпозволяя вам интуитивно проверить, что переменные-члены были правильно присвоены:
Приведённый выше синтаксис эквивалентен следующему присваиванию в теле функции; оба дают точно такой же вывод:
Разница между двумя подходами состоит в том, что список инициализации завершает инициализацию переменных-членов до входа в тело функции,перед этим, тогда как присваивание внутри тела функции сначала создаёт по умолчанию, а затем присваивает, что является одним лишним шагом. Дляconstдля const-членов, ссылочных членов и объектных членов без конструктора по умолчанию список инициализации являетсяединственнымспособом инициализации.
Предположим, есть класс C с несколькими полями X, Y, Z и т. д., которые нужно инициализировать; просто разделите разные поля запятыми, как показано ниже:
Примечание:Порядок инициализации членов в списке инициализации определяется их порядком в классе,порядком объявления, а не порядком, в котором они записаны. Рекомендуется поддерживать их согласованность, чтобы избежать путаницы.
Деструктор класса
ДеструкторклассаДеструктор — это особая функция-член класса. В конце времени жизни объекта (когда он выходит из области видимости илиdeleteудаляется), он автоматически выполняется, чтобы освободить ресурсы, занятые объектом (такие как динамическая память, файловые дескрипторы и т. д.).
Имя деструктора точно совпадает с именем класса, за исключением того, что перед ним добавляется тильда (~)~в качестве префикса. Он не возвращает никакого значения, не может иметь параметров, и каждый класс может иметь только один деструктор.
Следующий пример помогает лучше понять концепцию деструкторов:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Object is being created Length of line : 6 Object is being deletedДругие расширения