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

13.4. Присвоєння об'єктів

Якщо два об'єкти мають однаковий тип (тобто обидва вони – об'єкти одного класу), то значення членів-даних одного об'єкта можна присвоїти іншому. Для присвоєння недостатньо, щоб два класи були фізично подібними; імена класів, об'єкти яких беруть участь в операції присвоєння, повинні збігатися. Якщо один об'єкт присвоюється іншому, то за замовчуванням дані першого об'єкта порозрядно копіюються у другий. Механізм присвоєння об'єктів продемонстровано у наведеному нижче коді програми.

Код програми 13.6. Демонстрація механізму присвоєння об'єктів

#include <vcl>

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

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

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

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

int a, b;

public:

void setAB(int izm, int jzm) {a = izm, b = jzm;}

void showAB() { cout << "a = " << a << "; b = " << b << "\n";}

};

int main()

{

myClass A_ob, B_ob; // Створення об'єктів класу

A_ob.setAB(10, 20);

B_ob.setAB(0, 0);

cout << "Об'єкт A_ob до присвоєння:\n";

A_ob.showAB();

cout << "Об'єкт B_ob до присвоєння:\n";

B_ob.showAB();

cout << "\n";

B_ob = A_ob; // Присвоюємо об'єкт A_ob об'єкту B_ob.

cout << "Об'єкт A_ob після виконання операції присвоєння:\n";

A_ob.showAB();

cout << "Об'єкт B_ob після виконання операції присвоєння:\n";

B_ob.showAB();

getch(); return 0;

}

У процесі виконання програма відображає на екрані такі результати:

Об'єкт A_ob до присвоєння:

a = 10; b = 20

Об'єкт B_ob до присвоєння:

a = 0; b = 0

Об'єкт A_ob після виконання операції присвоєння:

a = 10; b = 20

Об'єкт B_ob після виконання операції присвоєння:

a = 10; b = 20

За замовчуванням усі значення членів-даних з одного об'єкта присвоюються іншому шляхом створення порозрядної копії1. Але, як буде показано далі, оператор присвоєння можна перевантажувати, визначивши власні операції присвоєння.

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

13.5. Передача об'єктів функціям

Об'єкт можна передати функції так само, як і змінну будь-якого іншого типу даних. Об'єкти передаються функціям шляхом використання звичайного С++-погодження про передачу параметрів за значенням. Згідно з цим погодженням, функції передається не сам об'єкт, а його копія. Це означає, що зміни, внесені в об'єкт-копію у процесі виконання функції, не роблять ніякого впливу на вхідний об'єкт, який використовується як аргумент для функції. Цей механізм продемонстровано у наведеному нижче коді програми.

Код програми 13.7. Демонстрація механізму передачі об'єктів функціям

#include <vcl>

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

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

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

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

int izm;

public:

void setIzm(int x) { izm = x;}

void getIzm(char *t) { cout << t << izm << "\n";}

};

void fun_f(tClass t_ob) // Визначення функції не члена класу

{

t_ob.getIzm("t2="); // Виведення числа 10.

t_ob.setIzm(100); // Встановлює тільки локальну копію.

t_ob.getIzm("t3="); // Виведення числа 100.

}

int main()

{

tClass T_ob; // Створення об'єкта класу

T_ob.setIzm(10);

T_ob.getIzm("t1="); // Виведення числа 10.

fun_f(T_ob); // Передача об'єкта функції не члена класу

T_ob.getIzm("t4="); // Як і раніше, виводиться число 10,

// значення змінної "i" не змінилося.

getch(); return 0;

}

Ось як виглядають результати виконання цієї програми.

t1= 10

t2= 10

t3= 100

t4= 10

Як підтверджують ці результати, модифікування об'єкта t_ob у функції fun_f() не впливає на об'єкт T_ob у функції main().