Конструкторы с параметрами.

Пример.

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

Конструкторы.

 

Функция конструктора (constructor function) имеет тоже имя, что и класс и не возвращает ни какого значения. Нельзя указывать даже void , т.к. конструктор никогда не возвращает значение.

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

В основном используется конструктор для автоматической инициализации создаваемых объектов в С++ и включается в описание класса.

#include <iostream.h>

// Объявление класса class1

class class1

{

int a;

public:

class1(); // Конструктор

void kwadrat();

};

// Инициализация а конструктором при создании объекта pr

class1::class1()

{

a=100;

}

//Функция возведения в квадрат и печати

void class1::kwadrat()

{

cout << a*a;

}

main()

{

class1 pr;//Создание объекта pr

pr.kwadrat(); //Вызов функции kwadrat

 

return 0;

}

 

Как видно из примера конструктор вызывается при создании объекта pr.

 

Функция деструктор (destructor) вызывается при удалении объекта для освобождения ресурсов (памяти и т.д.). Она также включается в объявление класса. Перед описанием деструктора ставится значок ~.

#include <iostream.h>

// Объявление класса class1

class class1

{

int a;

public:

class1(); // Конструктор

~class1(); //Деструктор

void kwadrat();

};

// Инициализация а конструктором при создании объекта pr

class1::class1()

{

a=100;

}

//Освобождение ресурсов деструктором

class1::~class1()

{

cout<<"Освобождение ";

}

//Функция возведения в квадрат и печати

void class1::kwadrat()

{

cout << a*a<<" ";

}

 

main()

{

class1 pr;//Создание объекта pr

pr.kwadrat(); //Вызов функции kwadrat

 

return 0;

}

 

Деструктор вызывается при удалении объекта или выхода из программы. Можно так же использовать для уничтожения объектов операции new и delete.

 

 

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

Пример:

#include <iostream.h>

class myclass

{

int a;

public:

myclass(int x); // конструктор

void show();

};

myclass::myclass(int x)

{

cout << "В конструкторе ";

a = x;

}

void myclass::show()

{

cout << a << " ";

}

main()

{

myclass ob(4);

ob.show();

return 0;

}

 

Конструктор myclass имеет один параметр. Значение, передаваемое в myclass() используется для инициализации а. Аргумент 4 передается в ob(4) в качестве аргумента. Деструктор в отличие от конструктора параметров не имеет.

В данном примере конструктору мы передавали константы, но так же можно передавать переменные:

Пример:

#include <iostream.h>

class myclass {

int i, j;

public:

myclass(int a, int b);

void show();

};

myclass::myclass(int a, int b)

{

i = a;

j = b;

}

 

void myclass::show()

{

cout << i << << j << " ";

}

main()

{

int x, y;

 

cout << "Введите два целых: ";

cin >> x >> y;

 

// использование переменных для создания ob

myclass ob(x, y);

ob.show();

return 0;

}

 

4.6. Указатели на объекты.

 

Доступ к члену объекта возможен не только через точку (.). Возможен доступ и через указатель на этот объект. В этом случае применяют стрелку (->).

 

 

Пример:

#include <iostream.h>

class myclass {

int a;

public:

myclass();//

myclass(int x); // конструктор

int get();

};

myclass::myclass()

{

a=0;

}

myclass::myclass(int x)

{

a = x;

}

int myclass::get()

{

return a;

}

 

main()

{

myclass ob(120); // создание объекта

myclass *p; // создание указателя на объект

p = &ob; // передача адреса ob в p

cout << "Значение, получаемое при использовании объекта:" << ob.get();

cout << " ";

cout << "Значение, получаемое при использовании указателя:" << p->get();

 

myclass *pn; // указатель на класс типа А

pn=new myclass;//создание экземпляра класса

float x=pn->get();//доступ по указателю

delete pn;

return 0;

}

 

В программе объявление myclass *p создает указатель на объект myclass(а не создает объект!).

Для передачи адреса ob в p используется выражение p=&ob.

Для получения доступа к объекту через указатель используется выражение p->get();

В случае необходимости создания и удаления объекта можно использовать операции new и delete.