русс | укр

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

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


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


Використання this для повернення значення


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


Більш практичним використанням вказівника this є повернення значень з методів і перезавантажуваних операцій у викликаючу програму.

У програмі 13.15 ми не6 могли розв’язати проблему повернення об’єкту з функції за посиланням, тому що об’єкт був локальним по відношенню до викликаної функції і, отже, знищувався після виходу з неї. Нам необхідний був довговічніший об’єкт, який дав би змогу повернути результат за посиланням. Об’єкт, чиїм методом є дана функція, стійкіший, ніж його власні методи. Методи об’єкту створюються і знищуються при кожному виклику, в той час, як сам об’єкт може бути видалений тільки ззовні (наприклад, по delete). Таким чином, повернення за посиланням результату роботи функції, що є методом даного об’єкту, є більш професійним розв’язком, ніж повернення об’єкту, створеного даним методом. Інакше кажучи, краще буде, якщо в об’єкт включений метод, тому що в такому випадку цей об’єкт і повертається в результаті роботи свого методу у викликаючу програму. Раніше в нас було навпаки – в методі містився об’єкт, який повертався у викликаючу програму, але внаслідок того, що локальний об’єкт при виході з функції підлягає знищенню, ми не можемо передати його за посиланням. Новий підхід дуже легко здійснюється за допомогою вказівника this.

Далі приведений лістінг програми 13.20, де функція operator=() повертає за посиланням той об’єкт, в який вона включена:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

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

class alpha

{private:

int data;

public:

alpha()

{ }

alpha(int d)

{data=d;}

alpha& operator=(alpha& a)

{data=a.data;

cout<<”\nЗапущений оператор присвоювання”;

return *this;

}

void display()

{cout<<data;}

};

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

 

int main()

{clrscr();

alpha a1(37);

alpha a2,a3;

a3=a2=a1; //перезавантажений = двічі

cout<<”\na2=”;a2.display();

cout<<”\na3=”;a3.display();

cout<<endl;

bioskey(0);

return 0;

}

Програма 13.20

В цій програмі можна використовувати описувач

alpha& operator=(alpha& a)

що використовує повернення за посиланням, замість

alpha operator=(alpha& a)

що повертає результат за значенням. Останнім виразом функції є

return *this;

Оскільки this є вказівником на об’єкт, чий метод виконується, то this* - це сам об’єкт і раніше приведений вираз повертає його за посиланням.

Кожного разу, коли в нашій програмі зустрічається знак рівності, запускається перезавантажена функція operator=(), яка виводить відповідне повідомлення.

Звичайно описаний метод з поверненням результату роботи перезавантажуваного operator=() за посиланням використовується для того, щоб уникнути створення зайвих копій об’єкта.

 


<== попередня лекція | наступна лекція ==>
Вказівник this | Удосконалена програма роботи з типом String


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