Шта је преоптерећење оператора?
Користећи преоптерећење оператора у Ц ++-у, можете одредити више значења за оператора у једном опсегу. Сврха преоптерећења оператора је да пружи посебно значење оператора за кориснички дефинисани тип података.
Уз помоћ преоптерећења оператора можете редефинисати већину оператора Ц ++. Такође можете да користите преоптерећење оператера за обављање различитих операција помоћу једног оператора.
У овом упутству за Ц ++ научићете:
- Шта је преоптерећење оператора?
- Синтакса
- Различити приступи преоптерећењу оператора у Ц ++
- Могу ли се сви Ц ++ оператори преоптеретити?
- Ствари које треба запамтити:
- Правила за преоптерећење оператера:
- Како преоптеретити оператора:
Синтакса
Да бисте преоптеретили Ц ++ оператора, требало би да дефинишете посебну функцију унутар Класе на следећи начин:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Ево објашњења за горњу синтаксу:
- Ретурн_типе је тип повратка за функцију.
- Даље, помињете кључну реч оператор.
- Симбол означава оперативни симбол који треба преоптеретити. На пример, +, -, <, ++.
- Аргументи се могу пренети у функцију оператора на исти начин као и функције.
Пример 1:
#includeusing namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључивање датотеке заглавља иостреам у наш код за коришћење његових функција.
- Укључите стд простор имена у наш програм да користи његове класе без позива.
- Направите класу под називом ТестЦласс.
- Користите модификатор приватног приступа који члана класе означава као приватно доступан.
- Направите број целобројне променљиве. Ова променљива ће бити приватно доступна.
- Користите модификатор јавног приступа који члана класе означава као приватно доступан.
- Користите конструктор класе да иницијализујете бројач променљивих на 5.
- Преоптерети значење оператора.
- Оператор ће вредност променљиве к умањити за 1.
- Крај одељка за преоптерећење оператера. Оператор је добио ново име.
- Дефинисање функције под називом Дисплаи () функција.
- Исписати вредност броја променљивих уз други текст на конзоли када је позвана функција Дисплаи (). }} Означава крај тела функције Дисплаи ().
- Крај предавања.
- Позовите главну () функцију. У ову функцију треба додати програмску логику.
- Направите инстанцу класе ТестЦласс и дајте јој име тц.
- Ово ће позвати функцију воид оператор - ().
- Користите став класе ТестЦласс да бисте позвали функцију Дисплаи ().
- Функција мора вратити вредност након успешног завршетка.
- Крај тела функције маин ().
Различити приступи преоптерећењу оператора у Ц ++
Преоптерећење оператора можете извршити применом било које од следећих врста функција:
- Функција члана
- Функција нечлана
- Функција пријатеља
- Функција преоптерећења оператора може бити функција члана када је Леви операнд објекат Класе.
- Када се леви операнд разликује, функција преоптерећења оператора треба да буде функција која није члан.
Функцију преоптерећења оператора можете учинити функцијом пријатеља ако треба да приступи приватном и заштићеном члану класе.
Могу ли се сви Ц ++ оператори преоптеретити?
Не. Постоје оператори Ц ++ који се не могу преоптеретити.
То укључује:
- :: -Оператор резолуције опсега
- ?: -тернарни оператор.
- . -селектор за чланове
- Сизеоф оператор
- * -члан селектора показивача
Ствари које треба запамтити:
- Са преоптерећењем оператора, можете редефинисати начин на који оператер ради само за типове које дефинише корисник (објекти, структуре). Не можете га користити за уграђене типове (флоат, цхар, инт, итд.).
- Оператери = и & Ц ++ су подразумевано преоптерећени. На пример, објекте исте класе можете директно копирати помоћу оператора =.
- Приоритет оператора не мења асоцијативно и приоритет оператора. Међутим, редослед оцењивања можете променити помоћу заграде.
- Постоје четири оператора која у Ц ++ не можете преоптеретити. Укључују оператер резолуције опсега (: :), оператор избора члана (.), Избор члана кроз показивач на функцијски оператор (. *) И тернарни оператор (? :).
Правила за преоптерећење оператера:
Ево правила за преоптерећење оператера:
- Да би могао да функционише, најмање један операнд мора бити кориснички дефинисани објект класе.
- Постојеће операторе можете само преоптеретити. Не можете преоптеретити нове операторе.
- Неки оператери се не могу преоптеретити помоћу функције пријатеља. Међутим, такви оператори могу бити преоптерећени помоћу функције члана.
Како преоптеретити оператора:
Пример 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључивање датотеке заглавља иостреам у наш код за коришћење његових функција.
- Укључите стд простор имена у наш програм да користи његове класе без позива.
- Направите класу под називом ОператорОверлоад.
- Користите модификатор приватног приступа који члана класе означава као приватно доступан.
- Направите целобројну променљиву к. Ова променљива ће бити приватно доступна.
- Користите модификатор јавног приступа који члана класе означава као приватно доступан.
- Користите конструктор класе за иницијализацију променљиве к на 10.
- Преоптерети значење оператора ++.
- Оператор ће повећати вредност променљиве к са 2.
- Крај одељка за преоптерећење оператера. Оператор је добио ново име.
- Позивање функције Принт ().
- Исписати вредност променљиве к заједно са осталим текстом на конзоли када је позвана функција Принт ().
- Крај тела функције Принт ().
- Крај предавања.
- Позовите главну () функцију. У ову функцију треба додати програмску логику.
- Креирајте инстанцу класе ОператорОверлоад под називом ов.
- Ово ће позвати функцију воид оператор ++ ().
- Користите став класе ОператорОверлоад да бисте позвали функцију Принт ().
- Функција мора вратити вредност након успешног завршетка.
- Крај тела функције маин ().
Пример 2:
#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључивање датотеке заглавља иостреам у наш програм како бисмо користили његове функције.
- Укључите стд простор имена у наш програм како бисте користили његове класе без позивања.
- Направите класу под називом ТестЦласс. Ознака {означава почетак предавања.
- Користите модификатор приватног приступа да означите променљиве као приватне, што значи да им се може приступити само из класе.
- Дефинишите две целобројне променљиве, реалну и преко.
- Користите модификатор јавног приступа да бисте конструктор означили као јавни, што значи да ће бити доступан чак и изван класе.
- Креирање конструктора класе и иницијализација променљивих.
- Иницијализујте вредност променљиве реал.
- Иницијализујте вредност променљиве преко.
- Крај тела конструктора.
- Замените значење + оператора.
- Направите резултат типа података типа ТестЦласс.
- Користите оператор + са сложеним бројевима. Овај ред ће додати стварни део броја стварном делу другог броја.
- Користите оператор + са сложеним бројевима. Ова линија додаће замишљени део броја замишљеном делу другог броја.
- Програм ће вратити вредност променљиве резултата након успешног извршења.
- Крај дефиниције новог значења + оператора, односно преоптерећења.
- Позовите методу принт ().
- Одштампајте нови сложени број након додавања на конзолу.
- Крај функције боди оф принт ().
- Крај тела класе ТестЦласс.
- Позивање главне () функције.
- Преношење вредности како стварних тако и сложених делова које треба додати. Први део ц1 биће додат првом делу ц2, односно 9 + 4. Други део ц1 биће додат другом делу ц, односно 5 + 3.
- Извођење операције помоћу преоптерећеног + оператора и чување резултата у променљивој ц3.
- Штампање вредности променљиве ц3 на конзоли.
- Крај тела главне () функције.
Резиме:
- У једном опсегу можете навести више значења за Ц ++ оператора.
- То се назива преоптерећење оператера.
- Преоптерећење оператора пружа посебно значење оператора за кориснички дефинисани тип података.
- Већину Ц ++ оператора можете редефинисати преко преоптерећења оператора.
- Не могу се сви Ц ++ оператори преоптеретити.
- Да би оператор био преоптерећен, најмање један од операнда мора бити кориснички дефинисан објекат.
- Само постојећи оператори могу бити преоптерећени. Не можете преоптеретити нове операторе.