Конструктор класса – это специальная функция-член класса, которая выполняется всякий раз, когда мы создаем новые объекты этого класса.
Конструктор имеет имя this и у него не должно быть никакого возвращаемого типа, даже void. Конструкторы могут быть очень полезны для установки начальных значений для некоторых переменных-членов.
В следующем примере иллюстрируется концепция конструктора:
import std.stdio; class Line { public: void setLength( double len ) { length = len; } double getLength() { return length; } this() { writeln("Объект создаётся"); } private: double length; } void main( ) { Line line = new Line(); // задать длину линии line.setLength(6.0); writeln("Длина линии : " , line.getLength()); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
Объект создаётся Длина линии : 6
Конструктор по умолчанию не имеет никаких параметров, но если вам это нужно, конструктор может иметь параметры. Он поможет вам присвоить начальные значения объекту во время его создания, как показано в следующем примере:
import std.stdio; class Line { public: void setLength( double len ) { length = len; } double getLength() { return length; } this( double len) { writeln("Объект создаётся, length = " , len ); length = len; } private: double length; } // Главная функция программы void main( ) { Line line = new Line(10.0); // получить изначально заданную длину. writeln("Длина линии : ",line.getLength()); // переустановить длину линии line.setLength(6.0); writeln("Длина линии : ", line.getLength()); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
Объект создаётся, length = 10 Длина линии : 10 Длина линии : 6
Деструктор – это особая функция-член класса, которая выполняется всякий раз, когда объект класса выходит из области видимости, или когда выражение удаления применяется к указателю на объект этого класса.
Деструктор имеет имя ~this, т.е. такое же, как и у конструктора, но префиксом тильды (~). Он не может ни возвращать значение, ни принимать какие-либо параметры. Деструктор может быть очень полезен для освобождения ресурсов перед выходом из программы, например, закрыть файлы, освободить память и т. д.
В следующем примере иллюстрируется концепция деструктора:
import std.stdio; class Line { public: this() { writeln("Объект создаётся"); } ~this() { writeln("Объект удаляется"); } void setLength( double len ) { length = len; } double getLength() { return length; } private: double length; } // Главная функция программы void main( ) { Line line = new Line(); // задать длину линии line.setLength(6.0); writeln("Длина линии : ", line.getLength()); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
Объект создаётся Длина линии : 6 Объект удаляется