русс | укр

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

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


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


Повернення значень


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


Функція може повертати результат у викликаючу програму за значенням або за посиланням. При поверненні за значенням відбувається фактично передача результату,а, отже, створюється копія об’єкту, який і повертається в програму. У викликаючій програмі цей новостворений об’єкт може присвоюватися якомусь іншому об’єкту чи використовуватися якось інакше. Якщо ж повертання відбувається за посиланням, ніякий новий об’єкт не створюється. Все, що повертається в якості результату – це посилання на вихідний об’єкт.

Функція operator=() повертає результат шляхом створення тимчасового об’єкта alpha та його ініціалізації за допомогою одноаргументного конструктора у виразі

return alpha(data);

Значення, що повертається – це копія вихідного, а не той сам об’єкт, чиїм методом є перезавантажувана операція =. Такий стиль повернення значень дозволяє вибудовувати ці функції в ланцюжок:

а3=а2=а1;

Це добре, але повернення результату за значенням має ті ж недоліки, що й передача за значенням. Насамперед, це створення в пам’яті копії повернутого об’єкту, що може призвести до певної плутанини. А чи можна повернути результат за посиланням, використовуючи описувач такого типу:

alpha& operator=(alpha& a)

На жаль ні, ми не можемо повернути результат за посиланням при роботі з локальними змінними даної функції.

Локальні змінні, тобто створені всередині функції і не оголошені статичними, знищуються після виходу з функції. Але повернення за посиланням повертає у викликаючу програму тільки адресу даних, яка для локальних змінних вказує на дані, що знаходяться всередині функції. При поверненні з функції вказівник зберігає вже таке значення, що не має сенсу. Компілятор може сигналізувати про таку проблему попередженням. Розв’язати таку проблему можна з використанням вказівника this.

 

Обмеження на успадкування

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

 


<== попередня лекція | наступна лекція ==>
Перезавантаження оператора присвоювання | Конструктор копіювання


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