Како имплементирати преоптерећење оператора у ц ++?



У овом чланку ћемо погледати још један објектно оријентисан концепт који олакшава руковање руковаоцем. Учили бисмо преоптерећење оператора на Ц ++.

У овом чланку ћемо истражити још један објектно оријентисан концепт који олакшава руковање руковаоцем. То јест, ми бисмо улазили у детаље Оператора Преоптерећење у Ц ++ . Следећи смерници ће бити обрађени у овом чланку,

Дакле, кренимо са овим чланком о Преоптерећењу оператора у Ц ++.





Преоптерећење у Ц ++

Ако креирамо два или више чланова исте класе који имају исто име, али се разликују у броју или типу параметра, то је познато као преоптерећење Ц ++.



У Ц ++-у можемо преоптеретити:

шта инит ради у питхону
  • методе
  • конструктори
  • индексирана својства

То је зато што ови чланови имају само параметре.

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.



Врсте преоптерећења у Ц ++

  • Преоптерећење функције
  • Преоптерећење оператера

Преоптерећење - Преоптерећење оператора у Ц ++ - Едурека

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.

Зашто се користи преоптерећење оператера?

Ц ++ програми се могу писати без знања преоптерећења оператора. Затим, програмери дубоко користе рад оператора да би програм учинио интуитивним. На пример,

Код можемо заменити као:

израчунавање = сабирање (дељење (а, б), множење (а, б))

За једначину

прорачун = (а / б) + (а * б)

Преоптерећење оператора пружа једноставан и лак начин за развој нових дефиниција за већину оператора у Ц ++. Уз довољно знања, креативном употребом функције и техника преоптерећења оператора, можемо скоро да створимо свој властити језик. У Ц ++ можемо преоптеретити све операторе, осим следећих:
● Оператор опсега (: :)
● Оператор величине (Сизеоф)
● бирач чланова (.)
● бирач показивача члана (*)
● тернарни оператор (? :)

Синтакса преоптерећења оператора

ретурн_типе име_класе:: оператер оп (списак_ аргумената) {// тело функције}

Где је тип поврата врста вредности коју функција враћа. име_ класе је име класе.

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.

Имплементација преоптерећења оператора у Ц ++

Функција оператора мора бити или нестатична (функција члана) или функција пријатеља да би се преоптеретила. Функција преоптерећења оператора може се применити на функцију члана ако је леви операнд објекат те класе, али ако је леви операнд другачији, тада се функција преоптерећења оператора мора дефинисати као функција која није члан.
Функција преоптерећења оператора може бити функција пријатеља ако захтева приступ приватним и заштићеним члановима класе. На пример, оператор оп је оперативна функција где је оп оператор који је преоптерећен, а оператор је кључна реч. Преоптерећење оператора може се постићи имплементацијом функције која може бити функција члана, функција нечлана или функција пријатеља.

Која је разлика између функција оператора и нормалних функција?

Функције оператора су исте као и нормалне функције. Једина разлика је у томе што је име функције оператора увек кључна реч оператор, а затим симбол оператора и функције оператора се позивају када се користи одговарајући оператор.

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.

Врсте приступа преоптерећења

Преоптерећење оператора може се извршити помоћу три приступа, то су

  • Преоптерећење унарног оператора.
  • Преоптерећење бинарног оператора.
  • Преоптерећење бинарног оператора помоћу функције пријатеља.

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.

Преоптерећење Унари Оператор

Размотримо унарни оператор ‘-‘. Оператор минус када се користи као унарни захтева само један операнд. Знамо да овај оператор мења знак операнда када се примени на основну променљиву података. Погледајмо како да преоптеретимо овај оператор тако да се може применити на објекат на исти начин као што се примењује на променљиву инт или флоат. Јединствени минус, када се примени на објекат, требало би да умањи сваку његову ставку података.

Пример:

како се користе битски оператори у јави
#инцлуде користећи простор имена стд цласс Хеигхт {публиц: // Члан Објекти инт феет, инцх // Конструктор за иницијализацију вредности објекта Хеигхт (инт ф, инт и) {феет = ф инцх = и} // Оператор преоптерећења (-) у извршити декремент // операција празнине објекта Хеигхт оператор- () {феет-- инцх-- цоут<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Излаз:

Објашњење:
У горњем примеру, преоптерећујемо унарни оператор „да бисмо извршили декретирање у две променљиве класе Хеигхт“. Конструктору просљеђујемо два параметра и њихове вриједности чувамо у варијаблама стопа и инча. Затим дефинишемо функцију преоптерећења оператора (воид оператор- ()
) у коме се две променљиве смањују за један положај.
Када напишемо -х1, он позива функцију преоптерећења оператора и смањује вредности прослеђене конструктору.

Настављамо са овим чланком о Преоптерећењу оператора у Ц ++.

Преоптерећење бинарног оператора

То је преоптерећење оператора који ради на два операнда. Узмимо исти пример класе Хеигхт, али овога пута додајте два објекта Хеигхт х1 и х2.

Пример:

#инцлуде усинг спаце намес стд цласс Хеигхт {публиц: инт феет, инцх Хеигхт () {феет = 0 инцх = 0} Хеигхт (инт ф, инт и) {феет = ф инцх = и} // Оператор за преоптерећење (+) за извођење додавање // објекта са две раздаљине помоћу бинарног оператора Хеигхт оператор + (Хеигхт & д2) // Позовите референцом {// Створите објекат за враћање Хеигхт х3 // Извршите сабирање стопа и инча х3.феет = феет + д2.феет х3. инцх = инцх + д2.инцх // Врати резултујући објекат ретурн х3}} инт маин () {Висина х1 (3, 7) Висина х2 (6, 1) Висина х3 // Користи преоптерећени оператор х3 = х1 + х2 цоут<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Излаз:

Објашњење:
Оператор висине + (висина & х2), овде ретурн_типе функције је класа Хеигхт, тако да враћа објекат х3 класе Хеигхт. У реду х3 = х1 + х2, х1 позива функцију оператора својих класа објеката и узима х2 као параметар, а затим примењујемо х3.феет = стопе + д2.феет и х3.инцх = инч + д2.инч који чува збир вредности променљивих стопа и инч у променљивим повезаним са објектом х3.
Када се израз „х3 = х1 + х2“ позива на функцију преоптерећену оператором, објекат х1 је преузео одговорност за позивање функције и х2 игра улогу аргумента који се преноси функцији. Горња изјава за позивање еквивалентна је х3 = х1.оператор + (х2), стога се члану података х2 приступа директно, а члану података х2 (који се предаје као аргумент) користи тачкасти оператор.

Правила за преоптерећење оператера

  • Само постојећи оператори могу бити преоптерећени, а нови оператори не могу бити преоптерећени
  • Преоптерећени оператор мора садржати најмање један операнд кориснички дефинисаног типа података.
  • Не користимо функцију пријатеља да бисмо преоптеретили одређене операторе. Међутим, функције члана могу се користити за преоптерећење тих оператора.
  • Када су унарни оператори преоптерећени функцијом члана, они не узимају експлицитне аргументе, али ако су преоптерећени функцијом пријатеља, узимају један аргумент.
  • Када су бинарни оператори преоптерећени преко функције члана узимају један експлицитни аргумент, а ако су преоптерећени преко функције пријатеља узимају два експлицитна аргумента.

Тако смо дошли до краја овог чланка о „Преоптерећењу оператора у Ц ++“. Ако желите да сазнате више, погледајте Јава Траининг компаније Едурека, поуздане компаније за учење на мрежи. Едурека курс је дизајниран да вас оспособи за основне и напредне Јава концепте заједно са разним Јава оквирима попут Хибернате & Спринг.

Имате питање за нас? Молимо вас да га помените у одељку за коментаре на овом блогу и јавићемо вам се што је пре могуће.