русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Клас String з використанням операції new


Дата додавання: 2014-04-22; переглядів: 960.


Операція new часто використовується в конструкторах класів. Для прикладу ми модифікуємо клас String, з яким працювали, вивчаючи перезавантаження операцій. Ми можемо усунути можливий дефект цього класу, що виникає, коли всі його об’єкти займають однакову кількість пам’яті: при цьому замалі рядки даремно витрачають пам’ять, а завеликі можуть не поміститися. В програмі 12.16 ми використаємо операцію new для виділення точної кількості пам’яті.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

#include<string.h>

class String

{private:

char* str;

public:

String(char* s)

{int length=strlen(s);

str=new char[length+1];

strcpy(str,s);

}

~String()

{cout<<”Видалення рядка\n”;

delete[]str;

}

void display()

{cout<<str<<endl;

}

};

///////////////////

int main()

{clrscr();

String s1=”Пробна фраза”;

cout<<”s1=”;

s1.display();

return 0;

}

Програма 12.16

 

(Зверніть увагу, що повністю результат роботи програми можна оглянути, тільки завершивши її і перейшовши у вікно користувача).

Клас String має тільки одне поле str, що є вказівником на char. Він буде вказувати на рядок, що міститься в об’єкті класу String. Тут не буде масиву, який містить рядок. Рядок зберігається в іншому місці, а клас String містить лише вказівник на нього.

 

Конструктор в програмі 12.16

Конструктор в цьому прикладі має тільки один аргумент: вказівник на рядок char*. З його допомогою, використовуючи операцію new, виділяється пам’ять для рядка, на який буде вказувати вказівник str. Потім конструктор використає функцію strcpy() для копіювання рядка у виділену ділянку пам’яті.

 

Деструктор в програмі 12.16

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

Деструктор – це функція, яка викликається автоматично при видаленні об’єкту. В програмі 12.16 він виглядає так:

~String()

{cout<<”Видалення рядка\n”;

delete[]str;

}

Деструктор повертає системі пам’ять, виділену при створенні об’єкту. Ми можемо вивести в кінці програми повідомлення про те, що деструктор виконав свою функцію. Об’єкти, як і інші змінні, звичайно знищуються, коли функція, в якій вони визначені, закінчить свою роботу. Деструктор гарантує, що пам’ять, виділена для об’єкту класу String, буде повернута системі при знищенні об’єкту, а не залишиться невизначеною.

 


<== попередня лекція | наступна лекція ==>
Операція delete | Вказівники на об’єкти


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн