tify">// cout <<В«Модуль c1:В» <
// Висновок результатів операційk;
K = c1 + c2; <<В«c1 + c2 =В» <
Контрольні запитання
) Перевантаження оператора полягає у зміні сенсу оператора (наприклад, оператора плюс (+), який зазвичай в C + + використовується для додавання) при використанні його з певним класом
) Щоб дозволити існування кількох однойменних операцій, досить ввести в мову правило, згідно з яким операція (процедура, функція або оператор) пізнаються компілятором не тільки по імені (позначенню), а й за типами їх параметрів. Таким чином, abs (i), де i оголошено як ціле, і abs (x), де x оголошено як речовий - це дві різні операції. Принципово в забезпеченні саме такого трактування немає жодних складнощів. p align="justify"> Щоб дати можливість визначати і перевизначати операції, необхідно ввести в мову відповідні синтаксичні конструкції. Варіантів їх може бути досить багато, але по суті вони нічим один від одного не відрізняються, досить пам'ятати, що запис виду В«<операнд1> <знакОпераціі> <операнд2>В» принципово аналогічна викликом функції В«<знакОпераціі> (< операнд1>, <операнд2>) В». Досить дозволити програмістові описувати поведінку операторів у вигляді функцій - і проблема опису вирішена. p align="justify">) Перевантажувати можна наступні оператори:
+ - * /% ^ & | ~! = <> p align="justify"> + = - = * =/=% = ^ = & = | =
<<>>>> = <<===! = <=> =
&& | | + + -> *, -> [] () new [] delete delete []
А не можна (підглянув у Страуструпа):
: (дозвіл області видимості)
(вибір члена)
* (вибір члена через вказівник на член)
?: тернарний оператор, typeid
Лабораторна робота № 3
Тема: Масиви об'єктів
В
Створити клас для роботи зі стеком. Елемент стека - дійсне число. Застосувати клас для виведення зростаючих серій послідовності дійсних чисел: a) у зворотному порядку;
# include В«stdafx.hВ»
# include В«stdio.hВ»
# include В«iostreamВ» namespace std;
// елемент для стека
struct elem {
int data; elem * next;
};
// клас стекаlifo {: elem * begin;
public:
// повертає перший елемент з стека
struct elem * get () {elem * rez; (begin! = NULL) {= begin;
} {= NULL;
} rez;
};
// пошук елементаelem * search_elem (int idata) {elem * curr; = begin; ((curr-> data! = idata) && (curr! = NULL)) {= curr-> next;
}; curr;
};
// функція созданіяelem * create_lifo () {elem * rez; = new struct elem;> next = NULL; rez;
};
// функція добавленіяset (int data) {elem * rez; = create_lifo ();> data = data;> next = begin; = rez;
};
// видалення елементаdel_1 () {elem * temp; = begin; (begin-> next! = NULL) {= begin-> next;
} {= NULL;
} temp;
};
// видалення цільового елементаdel_2 (int idata) {elem * curr; elem * temp; = begin; = search_elem (idata); ((curr-> next! = temp) && (curr-> next! = NULL)) {= curr-> next;
};> next = temp-> next; (temp == begin) {= begin-> next;
} temp;
};
// перегляд стeкawrite_lifo () {elem * curr; = begin; <<В«NACHALOВ» < data < next;
} <<В«KONECВ» <
};
// сортіровкаelem * find_max (struct elem * curr) {elem * max = curr; {(curr-> data> max-> data) {= curr;
} = curr-> next;
} while (curr! = NULL); max;
}; sort_lifo () {elem * max, * curr, * temp, * ntemp; = begin; {= find_max (curr); (max! = curr) {= curr; (max! = begin) {((temp-> next! = max) && (temp-> next! = NULL)) {= temp-> next;
};};> next = max-> next;// прибрали мах з стека = begin; ((temp-> next! = curr) && (temp-> ; next! = NULL)) {= temp-> next;
}; (temp-> next! = NULL) {> next...