Всего на сайте:
210 тыс. 306 статей

Главная | Механика

Large (void). {for(int i=0;i<LARGE;i++) data[i]=i;} ~Large(void){} Large s..  Просмотрен 245

{for(int i=0;i<LARGE;i++)

data[i]=i;}

~Large(void){}

Large slow(Large b)

{Large ans;

{for(int i=0;i<LARGE;i++)

ans.data[i]=b.data[i];

return ans;}};

Main()

{Large a,b;

{for(int i=0;i<100;i++)

a.slow(b);};

Час її роботи порівняно тривалий. Як збільшити швидкодію? Це можна зробити з використанням конструктора копіювання:

Class Large1

{private:

Large1(const Large1 & b);

public:

int data[LARGE];

Large1(void)

{for(int i=0;i<LARGE;i++)

data[i]=i;}

~LARGE1(void){}

Large1 fast(const Large1 &);

};

Large1::Large1(const Large1 & b);

{for(int i=0;i<LARGE;i++)

data[i]=b.data[i];}

inline Large1 Large1::fast(const Large1 & b)

{return Large1(b);}

Main()

{Large1 a,b;

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

a.fast(b);};

Ця версія програми, що використовує конструктор копіювання, працює значно швидше, адже за рахунок конструктора копіювання не створюються локальні копії структур. Конструктор у закритій частині опису класу використовується для прискорення оператора return у fast. Це можна пояснити тим, що дані, розміщені в закритому розділі класу, у даному випадку містяться в одному сегменті, і доступ до них здійснюється з використанням near-адресації, тобто одного лише зміщення.

7.7. Глобальні та локальні об'єкти

 

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

Глобальні об'єкти. Конструктори глобальних об'єктів викликаються до початку виконання функції main() у порядку їх наступності. Це забезпечує ініціалізацію всіх глобальних об'єктів класу до формального початку виконання програми – виклику функції main(). Деструктори глобальних об'єктів класу викликаються як частини коду завершення програми, після відпрацювання всіх функцій завершення, заданих викликом функції atexit(). Деструктори не викликаються, якщо програма завершується за допомогою функції abort().

Локальні об'єкти. Автоматичні об'єкти класу, оголошені локальними у функції, створюються разом з викликом функції та знищуються разом із завершенням її роботи. Автоматичні об'єкти зберігаються в стеку, як і звичайні автоматичні змінні. При завершенні роботи функції викликаються деструктори локальних об'єктів. Якщо програма завершується за допомогою виклику функції exit(), то деструктори глобальних об'єктів викликаються як завжди, а локальних – не викликаються. Наприклад:

class empty{

public:

char*obj_name;

empty(char*name)

{cout<<"створений об’єкт з ім’ям"<<name<<"класу empty\n";

obj_name=name;}

~empty()

{cout<<"об’єкт з ім’ям"<<obj_name<<"знищений\n";}

} one("one");

Предыдущая статья:Void f(void). {Timer today; const char*sp; sp=today.GetsTime(); cout<<".. Следующая статья:Void main(void). {empty second("second");} Результати роботи програми: ство..
page speed (0.0127 sec, direct)