Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Sizeof value 10 страница




Звичайний конструктор.

Конструктор копії.

Тут звичайний конструктор викликається двічі: перший раз під час створення об'єкта A_ob у функції main (), другий – під час створення об'єкта a_ob у функції fun_ob(). Конструктор копії викликається в ту мить, коли генерується тимчасовий об'єкт як значення, що повертається з функції fun_ob().

Хоча "приховані" виклики конструкторів копії можуть видатися містикою, проте не можна заперечувати той факт, що практично кожен клас у професійно написаних програмах містить безпосередньо певний конструктор копії, без якого не уникнути побічних ефектів, що виникають внаслідок створення за замовчуванням побітових копій об'єкта.

13.7.4. Конструктори копії – а чи не можна знайти щось простіше?

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

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

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

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

13.8. Ключове слово this

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

Ключове слово this – це покажчик на об'єкт, який викликає функцію-члена.

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

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

int izm;

void fun_f() {...};

//...

};

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

Насправді попередня настанова є скороченою формою такої:

this ->izm = 10;

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

Код програми 13.16. Демонстрація механізму застосування ключового слова this

#include <vcl>

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

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

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

 

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

int izm;

public:

void putIzm(int num) { this ->izm = num;} // те саме, що izm = num

int getIzm() { return this ->izm;} // те саме, що return izm

};

 

int main ()

{

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

 

T_ob.putIzm(100);

cout << "izm= " << T_ob.getIzm() << "\n";

 

getch (); return 0;

}

У процесі виконання ця програма відображає число 100.

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

Варто знати! Функції-"друзі" не мають покажчика this, оскільки вони не є членами класу. Тільки функції-члени класу мають покажчик this.


Розділ 14. Перевантаження операторів

У мові програмування C++ оператори можна перевантажувати для роботи з визначеними програмістом "класовими" типами. Перевага від перевантаження операторів полягає у тому, що воно дає змогу органічно інтегрувати нові типи у середовище програмування.

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

Перевантаження операторів тісно пов'язане з перевантаженням функцій. Щоб перевантажити оператор, необхідно визначити дію нової операції для класу, до якого вона застосовуватиметься. Для цього створюється функція operator (операторна функція), яка визначає дію цього оператора. Загальний формат функції operator є таким:

// Створення операторної функції

тип ім'я_класу:: operator #(список_аргументів)

{

операція_над_класом

}

У цьому записі перевантажуваний оператор позначається символом "#", а елемент тип вказує на тип значення, яке повертається внаслідок виконання даної операції. І хоча він у принципі може бути будь-яким, тип значення, що повертається функцією operator, часто збігається з іменем класу, для якого перевантажується даний оператор. Така кореляція полегшує використання перевантаженого оператора у складених виразах. Як буде показано далі, конкретне значення елемента список_аргументів визначається декількома чинниками.

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

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

14.1. Перевантаження операторів з використанням функцій-членів класу

14.1.2. Використання функцій-членів класу для перевантаження бінарних операторів додавання "+" і присвоєння "="

Почнемо з простого прикладу. У наведеному нижче коді програми створюється клас kooClass, який підтримує дії з координатами об'єкта в тривимірному просторі. Для класу kooClass пере­ван­тажуються оператори додавання "+" і присвоєння "=". Отже, розглянемо уважно код цієї програми.

Код програми 14.1. Демонстрація механізму перевантаження бінарних операторів за допомогою функцій-членів класу

#include <vcl>

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

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

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

 

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

int x, y, z; // Тривимірні координати

public:

kooClass() {x = y = z = 0;}

kooClass(int izm, int jzm, int kzm) {x = izm; y = jzm; z = kzm;}

kooClass operator +(kooClass op2); // Операнд op1 передається неявно.

kooClass operator =(kooClass op2); // Операнд op1 передається неявно.

void showRez(char *s);

};

 

// Перевантаження бінарного оператора додавання "+".

kooClass kooClass:: operator +(kooClass op2)

{

kooClass tmp; // Створення тимчасового об'єкта

 

tmp.x = x + op2.x; // Операції додавання цілочисельних значень

tmp.y = y + op2.y; // зберігають початковий вміст операндів

tmp.z = z + op2.z;

 

return tmp; // Повертає модифікований тимчасовий об'єкт

}

 

// Перевантаження оператора присвоєння "=".

kooClass kooClass:: operator =(kooClass op2)

{

x = op2.x; // Операції присвоєння цілочисельних значень

y = op2.y; // зберігають початковий вміст операндів

z = op2.z;

 

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Відображення тривимірних координат x, y, z.

void kooClass::showRez(char *s)

{

cout << "Координати об'єкта <" << s << ">:\n";

cout << "\tx= " << x << ", y= " << y << ", z= " << z << "\n";

}

 

int main ()

{

kooClass A_ob(1, 2, 3), B_ob(10, 10, 10), C_ob;

A_ob.showRez("A");

B_ob.showRez("B");

 

C_ob = A_ob + B_ob; // Додавання об'єктів A_ob і B_ob

C_ob.showRez("C=A+B");

 

C_ob = A_ob + B_ob + C_ob; // Додавання об'єктів A_ob, B_ob і C_ob

C_ob.showRez("C=A+B+C");

 

C_ob = B_ob = A_ob; // Множинне присвоєння об'єктів

C_ob.showRez("C=B");

B_ob.showRez("B=A");

 

getch (); return 0;

}

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

Координати об'єкта <A>:

x= 1, y= 2, z= 3

Координати об'єкта <B>:

x= 10, y= 10, z= 10

Координати об'єкта <C=A+B>:

x= 11, y= 12, z= 13

Координати об'єкта <C=A+B+C>:

x= 22, y= 24, z= 26

Координати об'єкта <C=B>:

x= 1, y= 2, z= 3

Координати об'єкта <B=A>:

x= 1, y= 2, z= 3

Аналізуючи код цієї програми, можна побачити, що обидві операторні функції мають тільки по одному параметру, хоча вони перевантажують бінарні операції. Цю, на перший погляд, "кричущу" суперечність можна легко пояснити. Йдеться про те, що під час перевантаження бінарного оператора з використанням функції-члена класу їй передається безпосередньо тільки один аргумент. Другий же опосередковано передається через покажчик this. Таким чином, у рядку

tmp.х = х + op2.х;

під членом-даних х маємо на увазі член this ->x, тобто член х зв'язується з об'єктом, який викликає дану операторну функцію. В усіх випадках опосередковано передається об'єкт, який вказується зліва від символу операції, тобто той, який став причиною виклику операторної функції. Об'єкт, який розташовується з правого боку від символу операції, передається цій функції як аргумент. У загальному випадку під час застосування функції-члена класу для перевантаження унарного оператора параметри не використовуються взагалі, а для перевантаження бінарного операнда береться до уваги тільки один параметр[54]. У будь-якому випадку об'єкт, який викликає операторну функцію, опосередковано передається через покажчик this.

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

Щоб зрозуміти реалізацію механізму перевантаження операторів, розглянемо уважно попередню програму, починаючи з перевантаженого оператора додавання "+". Під час оброблення двох об'єктів типу kooClass оператором додавання "+" виконуються операції додавання значень відповідних координат так, як це показано у функції operator +(). Але зауважте, що ця операторна функція не модифікує значення жодного операнда. Як результат виконання операції ця функція повертає об'єкт типу kooClass, який містить результати попарного додавання координат двох об'єктів. Щоб зрозуміти, чому операція "+" не змінює вміст жодного з об'єктів-учасників, розглянемо стандартну арифметичну операцію додавання, що застосовується, наприклад, до чисел 10 і 12. Отож, результат виконання операції 10+12 дорівнює 22, але під час його отримання ні число 10, ні 12 не були змінені. Хоча не існує правила, яке б не давало змоги перевантаженому оператору змінювати значення одного з його операндів, все ж таки краще, щоб він не суперечив загальноприйнятим нормам і залишався у згоді зі своїм оригінальним призначенням.

Звернемо Вашу увагу на те, що операторна функція operator +() повертає об'єкт типу kooClass, хоча вона могла б повертати значення будь-якого іншого допустимого типу, що визначається мовою програмування C++. Однак, той факт, що вона повертає об'єкт типу kooClass, дає змогу використовувати оператор додавання "+" у таких складних виразах, як A_ob + B_ob + C_ob – множинне додавання. Частина цього виразу (A_ob + B_ob) отримує результат типу kooClass, який потім додається до об'єкта C_ob. І якби ця частина виразу генерувала значення іншого типу (а не типу kooClass), то таке множинне додавання просто не відбулося б.

На відміну від оператора додавання "+", оператор присвоєння "=" призводить до модифікування одного з своїх аргументів[55]. Оскільки операторна функція operator =() викликається об'єктом, який розташований зліва від символу присвоєння (=), то саме цей об'єкт і модифікується внаслідок виконання операції присвоєння. Після виконання цієї операції значення, що повертається перевантаженим оператором, містить об'єкт, який було вказано зліва від символу присвоєння[56]. Наприклад, щоб можна було виконувати настанови, подібні до такої (множинне присвоєння)

A_ob = B_ob = C_ob = D_ob;,

необхідно, щоб операторна функція operator =() повертала об'єкт, який адресується покажчиком this, і щоб цей об'єкт розташовувався зліва від оператора присвоєння "=". Це дасть змогу виконати будь-який ланцюжок присвоєнь. Операція присвоєння – це одне з найважливіших застосувань покажчика this.

14.1.2. Використання функцій-членів класу для перевантаження унарних операторів інкремента "++" та декремента "--"

Можна перевантажувати унарні оператори інкремента "++" та декремента "--", або унарні "-" і "+". Як ми вже зазначали вище, під час перевантаження унарного оператора за допомогою функції-члена класу операторній функції жоден об'єкт не передається безпосередньо. Операція ж виконується над об'єктом, який здійснює виклик цієї функції через опосередковано переданий покажчик this. Наприклад, розглянемо дещо змінену версію попереднього прикладу програми. У наведеному нижче варіанті програми для об'єктів типу kooClass визначається бінарна операція віднімання та унарна операція інкремента.

Код програми 14.2. Демонстрація механізму перевантаження префіксної форми унарного оператора інкремента "++"

#include <vcl>

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

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

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

 

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

int x, y, z; // Тривимірні координати

public:

kooClass() {x = y = z = 0;}

kooClass(int izm, int jzm, int kzm) {x = izm; y = jzm; z = kzm;}

kooClass operator -(kooClass op2); // Операнд op1 передається неявно.

kooClass operator =(kooClass op2); // Операнд op1 передається неявно.

kooClass operator ++(); // Префіксна форма оператора інкремента "++"

void showRez(char *s);

};

 

// Перевантаження бінарного оператора віднімання "-".

kooClass kooClass:: operator -(kooClass op2)

{

kooClass tmp; // Створення тимчасового об'єкта

 

tmp.x = x - op2.x; // Операції додавання цілочисельних значень

tmp.y = y - op2.y; // зберігають початковий вміст операндів.

tmp.z = z - op2.z;

return tmp; // Повертає модифікований тимчасовий об'єкт

}

 

// Перевантаження оператора присвоєння "=".

kooClass kooClass:: operator =(kooClass op2)

{

x = op2.x; // Операції присвоєння цілочисельних значень

y = op2.y; // зберігають початковий вміст операндів.

z = op2.z;

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Перевантаження префіксної форми унарного оператора інкремента "++".

kooClass kooClass:: operator ++()

{

x++; // Інкремент координат х, y і z

y++;

z++;

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Відображення тривимірних координат x, y, z.

void kooClass::showRez(char *s)

{

cout << "Координати об'єкта <" << s << ">:\n";

cout << "\tx= " << x << ", y= " << y << ", z= " << z << "\n";

}

 

int main ()

{

kooClass A_ob(1, 2, 3), B_ob(10, 10, 10), C_ob;

 

A_ob.showRez("A");

B_ob.showRez("B");

 

C_ob = A_ob - B_ob; // Віднімання об'єктів A_ob і B_ob

C_ob.showRez("C=A-B");

 

C_ob = A_ob - B_ob - C_ob; // Віднімання об'єктів A_ob, B_ob і C_ob

C_ob.showRez("C=A-B-C");

 

C_ob = B_ob = A_ob; // Множинне присвоєння об'єктів

C_ob.showRez("C=B");

B_ob.showRez("B=A");

 

++C_ob; // Префіксний інкремент об'єкта C_ob

C_ob.showRez("++C");

 

getch (); return 0;

}

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

Координати об'єкта <A>:

x= 1, y= 2, z= 3

Координати об'єкта <B>:

x= 10, y= 10, z= 10

Координати об'єкта <C=A-B>:

x= -9, y= -8, z= -7

Координати об'єкта <C=A-B-C>:

x= 0, y= 0, z= 0

Координати об'єкта <C=B>:

x= 1, y= 2, z= 3

Координати об'єкта <B=A>:

x= 1, y= 2, z= 3

Як видно з останнього рядка результатів виконання програми, операторна функція operator ++() інкрементує кожну координату об'єкта і повертає модифіковане значення об'єкта, яке цілком узгоджується з традиційною дією оператора інкремента "++".

Як уже зазначалося вище, оператори інкремента "++" та декремента "--" мають префіксну і постфіксну форми. Наприклад, оператор інкремента можна використовувати у префіксній формі

++C_ob;

і у постфіксній формі

C_ob++;.

Оператори інкремента і декремента мають як префіксну, так і постфіксну форми.

Як зазначено в коментарях до попередньої програми, операторна функція operator ++() визначає префіксну форму оператора інкремента "++" для класу kooClass. Але це не заважає перевантажувати і його постфіксну форму. Оголошення прототипу постфіксної форми унарного оператора інкремента "++" для класу kooClass має такий вигляд:

kooClass kooClass:: operator ++(int notused);

Параметр notused не використовується самою функцією. Він слугує індикатором для компілятора, що дає змогу відрізнити префіксну форму оператора інкремента від постфіксної[57]. Нижче наведено один з можливих способів реалізації постфіксної форми унарного оператора інкремента "++" для класу kooClass:

// Перевантаження постфіксної форми унарного оператора інкремента "++".

kooClass kooClass:: operator ++(int notused)

{

kooClass tmp = * this; // Збереження початкового значення об'єкта

 

x++; // Інкремент координат х, y і z

y++;

z++;

return tmp; // Повернення початкового значення об'єкта

}

Звернемо Вашу увагу на те, що ця операторна функція зберігає початкове значення операнда шляхом виконання такої настанови:

kooClass tmp = * this;

Збережене значення операнда (у об'єкті tmp) повертається за допомогою настанови return. Потрібно мати на увазі, що традиційний постфіксний оператор інкремента спочатку набуває значення операнда, а потім його інкрементує. Отже, перш ніж інкрементувати поточне значення операнда, його потрібно зберегти, а потім повернути (не забувайте, що постфіксний оператор інкремента не повинен повертати модифіковане значення свого операнда). У наведеній нижче програмі реалізовано обидві форми унарного оператора інкремента "++".

Код програми 14.3. Демонстрація механізму перевантаження унарного оператора інкремента "++" з використанням його префіксної та постфіксної форм

#include <vcl>

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

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

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

 

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

int x, y, z; // Тривимірні координати

public:

kooClass() { x = y = z = 0;}

kooClass(int izm, int jzm, int kzm) {x = izm; y = jzm; z = kzm;}

kooClass operator *(kooClass op2); // Операнд op1 передається неявно.

kooClass operator =(kooClass op2); // Операнд op1 передається неявно.

kooClass operator ++(); // Префіксна форма оператора інкремента "++"

// Постфіксна форма оператора інкремента "++"

kooClass operator ++(int notused);

kooClass operator-(); // Префіксна форма унарного оператора "-"

void showRez(char *s);

};

 

// Перевантаження бінарного оператора множення "*".

kooClass kooClass:: operator *(kooClass op2)

{

kooClass tmp; // Створення тимчасового об'єкта

 

tmp.x = x * op2.x; // Операції множення цілочисельних значень

tmp.y = y * op2.y; // зберігають початковий вміст операндів

tmp.z = z * op2.z;

 

return tmp; // Повертає модифікований тимчасовий об'єкт

}

 

// Перевантаження оператора присвоєння "=".

kooClass kooClass:: operator =(kooClass op2)

{

x = op2.x; // Операції присвоєння цілочисельних значень

y = op2.y; // зберігають початковий вміст операндів

z = op2.z;

 

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Перевантаження префіксної форми унарного оператора інкремента "++".

kooClass kooClass:: operator ++()

{

x++; // Інкремент координат х, y і z

y++;

z++;

 

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Перевантаження постфіксної форми унарного оператора інкремента "++".

kooClass kooClass:: operator ++(int notused)

{

kooClass tmp = * this; // Збереження початкового значення об'єкта

 

x++; // Інкремент координат х, y і z

y++;

z++;

 

return tmp; // Повернення початкового значення об'єкта

}

 

// Перевантаження префіксної форми унарного оператора "-".

kooClass kooClass:: operator -()

{

x=-x; // Зміна знаку координат х, y і z

y=-y;

z=-z;

 

// Повернення модифіков. об'єкта операнда, адресованого покажчиком

return * this;

}

 

// Відображення тривимірних координат x, y, z.

void kooClass::showRez(char *s)

{

cout << "Координати об'єкта <" << s << ">:\n";

cout << "\tx= " << x << ", y= " << y << ", z= " << z << "\n";

}

 

int main ()

{

kooClass A_ob(1, 2, 3), B_ob(10, 10, 10), C_ob;

 

A_ob.showRez("A");

B_ob.showRez("B");

 

C_ob = A_ob * B_ob; // Множення об'єктів A_ob і B_ob

C_ob.showRez("C=A*B");

 

C_ob = A_ob * B_ob * C_ob; // Множення об'єктів A_ob, B_ob і C_ob

C_ob.showRez("C=A*B*C");

 

C_ob = B_ob = A_ob; // Множинне присвоєння об'єктів

C_ob.showRez("C=B");

B_ob.showRez("B=A");

 

++C_ob; // Префіксна форма інкремента

C_ob.showRez("++C");

 

C_ob++; // Постфіксна форма інкремента

C_ob.showRez("C++");

 

A_ob = ++C_ob; // Об'єкт A_ob набуває значення об'єкта C_ob

// після його інкрементування.

A_ob.showRez("A=++C"); // Тепер об'єкти A_ob і C_ob

C_ob.showRez("C"); // мають однакові значення.

 

A_ob = C_ob++; // Об'єкт A_ob набуває значення об'єкта C_ob

// до його інкрементування.

A_ob.showRez("A=C++"); // Тепер об'єкти A_ob і C_ob

C_ob.showRez("C"); // мають різні значення.

 

-C_ob; // Префіксна форма зміни знаку

C_ob.showRez("-C");

 

getch (); return 0;

}

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




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 411; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.229 сек.