Конструкторы с параметрами.
Пример.
Деструкторы.
Конструкторы.
Функция конструктора (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.