Главная » Статьи » Програмування » C [ Добавить статью ]

RUS Уроки по программированию на языке С Конструкторы и деструкторы.)

Конструкторы и деструкторы.

Начальная инициализация объектов класса. Конструкторы.

Иногда во время создания объекта его элементам необходимо присвоить начальные значения. Как вы уже знаете, сделать это непосредственно в определении класса нельзя. Решить данную проблему можно, написав функцию, которая будет присваивать начальные значения переменным класса, и вызывать эту функцию каждый раз сразу после объявления объекта, что мы благополучно сделали в примере предыдущего раздела урока.

Однако, в языке С++ есть механизм, позволяющий решить эту проблему иным путём. Это - конструкторы.

Конструктор (construct - создавать) - это специальная функция-член класса,объявленная с таким же именем, как и класс. Для конструктора не определяется тип возвращаемого значения. ДАЖЕ void!!! Рассмотрим пример создания конструктора:

# include <iostream>
using namespace std;
class Test{
 // так как спецификатор доступа не указан
 // данная переменная будет по умолчанию закрыта
 // для доступа вне класса (private)
 int one;

 // спецификатор доступа public
 // все члены, идущие после него
 // будут открыты для доступа извне
public:
 Test(){
 one=0;
 two=0;
 } 

 // инициализировать переменные в классе 
 // при создании запрещено, поэтому мы определяем
 // метод, реализующий данное действие
 void Initial(int o,int t){
 one=o;
 two=t;
 }

 // метод показывающий переменные класса 
 // на экран
 void Show(){
 cout<<"\n\n"<<one<<"\t"<<two<<"\n\n";
 }
 int two;
};
void main(){

 // создается объект с типом Test
 Test obj; (здесь сработает конструктор)
 
 // показ на экран
 obj.Show(); // 0 0

 // вызывается функция, инициализирующая его свойства
 obj.Initial(2,5);

 // показ на экран
 obj.Show(); // 2 5

 // прямая запись в открытую переменную two
 // с переменной one такая запись невозможна, так
 // как доступ к ней закрыт
 obj.two=45;

 // снова показ на экран
 obj.Show(); // 2 45

}

1. Конструктор автоматически вызывается при создании объекта, т.е не нужно специально его вызывать.

2. Основное назначение конструкторов - инициализация объектов.

3. Конструктор должен быть всегда public!!!


C помощью параметров конструктору можно передать любые данные, необходимые для инициализации объектов класса.

Пример. Класс, описывающий точку.
# include <iostream>
using namespace std;

// описание класса Point
class Point {
 int x, y; 
 // координаты точки, по умолчанию имеют 
 // уровень доступа private

public:
 // конструктор присваивает переменным класса x и y начальные 
 // значения соответственно x0 и y0
 Point(int x0, int y0)
 {
 x = x0;
 y = y0;
 }

 
 // функция вывода координат точки на экран
 void ShowPoint()
 {
 cout << "\nx = " << x;
 cout << "\ny = " << y;
 } 
 
};

void main()
{
 Point A(1,3); // создаем точку А (объект типа Point) 
 // с координатами x = 1, y = 3 (вызывается конструктор Point(1, 3)
 A.ShowPoint(); // выводим координаты точки А на экран
 
}
Примечание: При создании объекта значения параметров передаются конструктору с использованием синтаксиса, подобного обычному вызову функции.
Еще кое-что о конструкторах...

1. Конструктор без параметров называют конструктором по умолчанию. Такой конструктор обычно присваивает переменным-членам класса наиболее часто используемые значения.

 Point()
 {
 x = 0;
 y = 0;
 }

2. Для каждого класса может существовать только один конструктор по умолчанию.

3. Если для класса не определено никакого конструктора, компилятор создает конструктор по умолчанию. Такой конструктор не задает никаких начальных значений, он просто существует :))).

Деструкторы.

Деструктор выполняет функцию, противоположную функции конструктора. Деструктор (destruct - разрушать) - это специальная функция класса, которая автоматически вызывается при уничтожении объекта - например, когда объект выходит из области видимости.

Деструктор может выполнять любые задачи, в момент удаления объекта. Например, если в конструкторе была динамически выделена память, то деструктор должен освободить эту память перед удалением объкта класса.

Основные особенности при работе с деструктором.

1. Деструктор не принимает никаких параметров и не возвращает никаких значений.

2. Класс может иметь только один деструктор.

И в заключении рассмотрим пример последовательности, в которой вызываются конструкторы и деструкторы.

# include <iostream>
using namespace std;

// описание класса CreateAndDestroy
class CreateAndDestroy
{
public: 
 CreateAndDestroy(int value) // конструктор 
 {
 data = value;
 cout << " Object " << data << " constructor";
 }

 ~CreateAndDestroy() // деструктор
 {
 cout << " Object " << data << " destructor" << endl;
 }
private:
 int data;
};

void main ()
{
 
 CreateAndDestroy one(1); 
 CreateAndDestroy two(2); 
 
}

РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ

Object 1 constructor 
Object 2 constructor 
Object 2 destructor 
Object 1 destructor 

Вывод к примеру - деструкторы вызываются в последовательности, обратной вызову конструкторов.

Категория: C | Добавил: DEN-SHP (06.11.2012)
Просмотров: 866 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]