Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

3.7.4. Конструктори копії та їх альтернативи

Як неодноразово згадувалося раніше, C++ - потужна мова програмування. Вона має багато засобів, які надають їй надзвичайно широкі можливості, але при цьому її можна назвати складною мовою. Конструктори копії - один з важливих засобів, який багато програмістів-початківців вважають основою складності мови, оскільки механізм їх роботи не сприймається на інтуїтивному рівні. Такі програ­місти часто не розуміють, чому конструктори копії мають таке важливе значення для ефективної роботи коду програми. Багато з них не відразу знаходять точну відповідь на запитання: коли потрібен конструктор копії, а коли - ні? Здебільшого у них виникає наступне запитання: чи не існує йому простішої альтернативи? Від­повідь також непроста: і так, і ні!

Такі мови програмування, як Java і С#, не мають конструкторів копії, оскіль­ки в жодній з них не створюються побітові копії об'єктів. Йдеться про те, що як Java, так і C# динамічно виділяють пам'ять для всіх об'єктів, а програміст оперує цими об'єктами виключно через посилання. Тому при передачі об'єктів функції як параметрів або при поверненні їх з функцій в копіях об'єктів немає ніякої потреби.

Той факт, що ні мова Java, ні мова C# не потребують конструкторів копії, ро­бить ці мови дещо простішими, але за простоту теж потрібно платити. Робота з об'єктами виключно за допомогою посилань (а не безпосередньо, як у мові прог­рамування C++) накладає обмеження на типи операцій, які може виконувати прог­раміст. Понад це, таке використання об'єктних посилань у мовах Java і C# не дає змоги точно визначити, коли об'єкт буде зруйновано. У мові програмування C++ об'єкт завжди руйнується при виході з області видимості.

Мова C++ надає програмісту повний контроль над ситуаціями, які виникають у процесі роботи коду програми, тому вона є дещо складнішою, ніж мови Java і С#. Це - ціна, яку ми платимо за потужні засоби програмування.

    1. Поняття про ключове слово this

Під час кожного виклику функції-члена класу їй автоматично передається по­кажчик на об'єкт, який іменується ключовим словом this, для якого викликається ця функція. Покажчик this - це неявний параметр, який приймається всіма функці- ями-члєнами класу. Отже, в будь-якій функції-члені класу покажчик this викорис­товується для посилання на викликуваний об'єкт.

Як уже зазначалося вище, функція-член класу може мати прямий доступ до закритих (private) членів-даних свого класу. Наприклад, нехай визначено такий клас:

class myClass { // Оголошення класового типу int с;

Void Fun() {...};

II...

};

У тілі функції Fun() можна використовувати таку настанову для присвоєння члену с значення 10: с = 10;

Насправді попередня настанова є скороченою формою такої: this->c= 10;

Щоби зрозуміти, як працює покажчик this, розглянемо таку навчальну програму.

Код програми 3.16. Демонстрація механізму застосування ключового слова this #include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

class myClass {// Оголошення класового типу int с; public:

void Get(int n) {this->c = n;} // те саме, що c = n int PutO {return this->c;} // те саме, що return c

};