progs.biz  
Начало>C/C++>Основы C++>Урок 26
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

И. Портянкин. Swing. Эффектные пользовательские интерфейсы
И. Портянкин. Swing. Эффектные пользовательские интерфейсы
Заказать на Озоне



Яндекс-цитирования

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.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев