Конструктор викликається при створенні об’єкту. Як ми вже знаємо з вивчення об’єктних можливостей TurboPascal, існує також інша підпрограма (у випадку С++ функція), яка автоматично викликається при знищенні об’єкта і називається деструктором. Ім’я деструктора співпадає з іменем конструктора (і класу), тільки починається знаком ~
class foo
{private:
int data;
public:
Foo(): data(0) //конструктор
{ }
~Foo() //деструктор
{ }
};
Як і конструктори, деструктори не повертають значення. Ще вони не мають аргументів. Найпоширеніше використання деструкторів – вивільнення пам’яті, виділеної конструктором при створенні об’єкту, отже, найкраще їх використовувати при роботі з динамічними об’єктами.
Об’єкти в якості аргументів функції
Модернізуємо програму 9.3 так, щоб продемонструвати кілька нових аспектів створення класів: перезавантаження конструкторів, визначення методу класу поза класом і використання об’єктів у якості аргументів функції.
Далі приведений лістінг програми 9.5
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Distance
{private:
int feet;
float inches;
public:
Distance():feet(0),inches(0.0) //конструктор без аргументів
{ }
//конструктор з 2 аргументами
Distance(int ft,float in):feet(ft),inches(in)
{ }
void getdist()
{cout <<”\nВведіть число футів “; cin >>feet;
cout << “Дюймів “; cin>>inches;
}
void showdist()
{cout <<feet << “\’ “<< inches <<”\’’”;}
void add_dist(Distance,Distance); //прототип
};
//dodavanna d2 i d3
void Distance::add_dist(Distance d2,Distance d3)
{
inches=d2.inches+d3.inches;
feet=0;
if(inches>=12.0)
{inches-=12.0;
feet++;}
feet+=d2.feet+d3.feet;
}
int main()
{
clrscr();
Distance dist1,dist3;
Distance dist2(11,6.25); //визначення та ініціалізація
dist1.getdist();
dist3.add_dist(dist1,dist2);
cout <<”\ndist1=”;dist1.showdist();
cout << “\ndist2=”;dist2.showdist();
cout << “\ndist3=”;dist3.showdist();
cout <<endl;
bioskey(0);
return 0;
}
Програма 9.5