C/C++ Урок 26. Конструкторы и деструкторы
Конструкторы и деструкторы - это специальные методы класса. Это надо понять в первую очередь. Разумеется, эти методы обладают целым рядом особенностей (именно по этому они и выделены в специальную группу). Сейчас мы об этих особенностях и поговорим.
Первое. В отличие от других методов они должны называться особым образом. Если обычные методы могут называться как угодно, то имя констуктора должно совпадать с именем класса, а имя деструктора - с именем класса с приписанной в начале тильдой. Например, если класс называется CRect, то конструктор этого класса обязан называться тоже CRect, а деструктор - ~CRect.
Второе. В отличии от других методов конструктор и деструктор вызываются сами (а другие методы мы вызываем явным образом). Конструктор вызывается в момент создания экземпляра класса, а деструктор - в момент уничтожения. Т. е. их не надо вызывать явным образом - они вызываются сами. Именно поэтому конструкторы обычно используются для задания некоторых начальных значений для переменных класса, а деструкторы - для освобождения памяти (в случае если у вас есть внутри класса переменные-указатели).
Третье. Ни конструктор, ни деструктор не возвращают никакого значения (даже типа void). Это означает, в частности, что при обяъвлении конструтора и деструктора в классе мы перед ними не пишем ни какой тип.
Четвертое. В классе может быть несколько конструкторов (и они должны различаться параметрами), и только один деструктор (у него параметров вообще быть не может).
Вот пример на все вышесказанное (этот пример основан на уроке 24):
class CRect
{
float m_a, m_b; //Стороны.
public:
//Конструкторы и деструктор.
CRect(); // Конструктор без параметров.
CRect(float a. float b); // Конструктор с двумя параметрами.
~CRect(); // Деструктор.
...
};
...
// Реализация конструкторов и деструкторов.
CRect::CRect()
{
// Задание стандартных (нулевых) значений.
m_a = 0;
m_b = 0;
}
CRect::CRect(float a. float b)
{
// Задание значений, задаваемых параметрами.
m_a = a;
m_b = b;
}
CRect::~CRect()
{
// Просто вывод некоторой надписи.
cout<<"Destructor\n";
}
А вот так можно использовать класс в функции main:
void main()
{
//Использование класса.
CRect r; // Вызов конструктора без параметров.
cout<<"Perimeter = "<<r.GetPerim()<<"\n"; // Выведется 0.
cout<<"Square = "<<r.GetSquare()<<"\n"; // Выведется 0.
CRect r1(2, 3); // Вызов конструктора с параметрами.
cout<<"Perimeter = "<<r1.GetPerim()<<"\n"; // Выведется 10.
cout<<"Square = "<<r1.GetSquare()<<"\n"; // Выведется 6.
// В этом месте вызовутся 2 деструктора - для переменных r и r1.
// Соответственно, на консоль выведется два раза слово "Destructor".
}
В приведенном примере методы GetPerim и GetSquare мы берем из урока 24.
|