Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по C/C++

  Все выпуски  

Уроки по C/C++


Информационный Канал Subscribe.Ru

Уроки по C/C++. Рассылки сайта progs.biz  
Начало > C++ > Основы C++ > Урок 26

Г. Шилдт. Самоучитель C++
Г. Шилдт. Самоучитель C++
Заказать на Озоне


Полные версии уроков (с картинками): урок 26.

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.

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


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


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

http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное