Використання this для повернення значення
Більш практичним використанням вказівника this є повернення значень з методів і перезавантажуваних операцій у викликаючу програму.
У програмі 22.15 ми не6 могли розв’язати проблему повернення об’єкту з функції за посиланням, тому що об’єкт був локальним по відношенню до викликаної функції і, отже, знищувався після виходу з неї. Нам необхідний був довговічніший об’єкт, який дав би змогу повернути результат за посиланням. Об’єкт, чиїм методом є дана функція, стійкіший, ніж його власні методи. Методи об’єкту створюються і знищуються при кожному виклику, в той час, як сам об’єкт може бути видалений тільки ззовні (наприклад, по delete). Таким чином, повернення за посиланням результату роботи функції, що є методом даного об’єкту, є більш професійним розв’язком, ніж повернення об’єкту, створеного даним методом. Інакше кажучи, краще буде, якщо в об’єкт включений метод, тому що в такому випадку цей об’єкт і повертається в результаті роботи свого методу у викликаючу програму. Раніше в нас було навпаки – в методі містився об’єкт, який повертався у викликаючу програму, але внаслідок того, що локальний об’єкт при виході з функції підлягає знищенню, ми не можемо передати його за посиланням. Новий підхід дуже легко здійснюється за допомогою вказівника this.
Далі приведений лістінг програми 22.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;
}
Програма 22.20
В цій програмі можна використовувати описувач
alpha& operator=(alpha& a)
що використовує повернення за посиланням, замість
alpha operator=(alpha& a)
що повертає результат за значенням. Останнім виразом функції є
return *this;
Оскільки this є вказівником на об’єкт, чий метод виконується, то this* - це сам об’єкт і раніше приведений вираз повертає його за посиланням.
Кожного разу, коли в нашій програмі зустрічається знак рівності, запускається перезавантажена функція operator=(), яка виводить відповідне повідомлення.
Звичайно описаний метод з поверненням результату роботи перезавантажуваного operator=() за посиланням використовується для того, щоб уникнути створення зайвих копій об’єкта.
Дата добавления: 2015-08-26; просмотров: 563;