Об’єкт з ім’ям one знищений

Покажчики на об'єкти. Покажчики можуть посилатися на динамічні об'єкти, пам'ять для яких виділяється за допомогою операції new:

Timer*ptoday;

ptoday=new Timer;

У купі виділяється область для об'єкта типу Timer. Адреса першого байта цієї області присвоюється ptoday. Крім того, С++ викликає конструктор за умовчанням, який ініціалізує об'єкт. Якщо необхідно виділити пам'ять і викликати інший конструктор, то можна вказати відповідні параметри:

ptoday=new Timer(9,14,1917,10,45).

Об'єкти-посилання. Об'єкти можуть оголошуватись як посилання. Наприклад, оголошено глобальний об'єкт

Timer today;

Можемо визначити посилання:

Timer & rtoday=today;

Rtoday – це посилання. Оскільки посилання здійснюється на вже існуючі об'єкти, то при вході в область дії посилання конструктор класу не викликається і, відповідно, не викликається деструктор при виході з області дії.

Об'єкти – результати функцій. Об'єкти, посилання й покажчики на них можуть виступати як аргументи функцій. Функція може повертати об'єкт безпосередньо:

Timer newtime(void)

{Timer t;

return t;}

Тоді функція може викликатися так:

Timer anothertime=newtime();

При цьому результат, який повертається функцією newtime(), копіюється в anothertime. Однак у нашому випадку це не логічно, адже аналогічні дії виконуються при оголошенні: Timer anothertime;

Часто використовують посилання на об'єкт чи покажчик на об'єкт як результат функції:

Timer*newtime(void)

{Timer*p=new Timer;

return p;}

Тоді можна використати newtime() для отримання нового обє'кта та присвоїти його адресу покажчику на Timer:

Timer*tp=newtime();

Функції-посилання можна використовувати для посилання на існуючі об'єкти:

Timer today; – глобальний об'єкт.

Timer &newtimer(void)

{return today;}

Можна оголосити посилання на today:

Timer & tr=newtimer();

Масиви об'єктів. Масив об'єктів синтаксично задається як звичайний масив:

Timer tentimes[10];

При цьому клас, екземпляри якого утворюють масив, повинен обов'язково мати конструктор за умовчанням. Розглянемо приклад роботи з масивами об'єктів:

Main(void)

{ Timer tentimes[10];

for(int i=0;i<10;i++) tentimes[i].display();

return 0;}

Очевидно, що тут буде надруковано 10 однакових значень.

Можна ініціалізувати масив так:

Main(void)

{Timer tarray[3]={Timer(),Timer(8),Timer(8,1)};

for(int i=0;i<3;i++)tarray[i].display();

return 0;}

Масиви об'єктів можуть розміщуватись у купі та адресуватись за допомогою покажчиків:

Main()

{Timer*tarrayp;

tarrayp=new Timer[6];

for(int i=0;i<6;i++)

tarrayp[i].display();

delete[ ]tarrayp;

return 0;}

У цьому прикладі шість разів викликається конструктор за умовчанням при виділенні пам'яті оператором new та шість разів – деструктор при звертанні до delete, яка вжита в специфічній формі – із квадратними дужками (C++ ігнорує будь-які значення всередині дужок).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: