Как да приложим претоварване на оператора в c ++?



В тази статия ще разгледаме друга обектно-ориентирана концепция, която улеснява боравенето с оператора. Ще учим претоварване на оператор в C ++.

В тази статия ще разгледаме още една обектно-ориентирана концепция, която улеснява боравенето с оператора. Това е, че щяхме да навлизаме в детайлите на Оператора Претоварване в C ++ . Следните указания ще бъдат обхванати в тази статия,

И така, нека започнем с тази статия за Претоварване на оператора в C ++.





Претоварване в C ++

Ако създадем два или повече членове от един и същи клас с едно и също име, но различни по брой или тип параметри, това е известно като C ++ претоварване.



В C ++ можем да претоварим:

  • методи
  • конструктори
  • индексирани свойства

Това е така, защото тези членове имат само параметри.

Продължавайки с тази статия за претоварване на оператора в C ++.



Видове претоварване в C ++

  • Претоварване на функцията
  • Претоварване на оператора

Претоварване - Претоварване на оператора в C ++ - Edureka

Продължавайки с тази статия за претоварване на оператора в C ++.

Защо се използва претоварване на оператора?

Програмите на C ++ могат да се пишат без знанието за претоварване на оператора. Тогава също операторите, които работят, се използват дълбоко от програмистите, за да направят програмата интуитивна. Например,

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

изчисление = добавяне (разделяне (a, b), умножаване (a, b))

За уравнение

изчисление = (a / b) + (a * b)

Претоварването на оператора осигурява лесен и лесен начин за разработване на нови дефиниции за повечето оператори в C ++. С достатъчно знания можем почти да създадем нов собствен език чрез креативно използване на техниките за претоварване на функциите и операторите. Можем да претоварим всички оператори в C ++, с изключение на следното:
● Оператор за обхват (: :)
● Оператор за размер (Sizeof)
● избор на член (.)
● селектор на член указател (*)
● третичен оператор (? :)

какво е ide в java

Синтаксис на претоварване на оператора

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

Когато типът на връщане е типът стойност, върната от функцията. class_name е името на класа.

Продължавайки с тази статия за претоварване на оператора в C ++.

Внедряване на претоварване на оператора в C ++

Операторската функция трябва да бъде или нестатична (членска функция), или приятелска функция, за да се претовари. Функцията за претоварване на оператора може да бъде приложена към функция член, ако левият операнд е обект от този клас, но ако левият операнд е различен, тогава функцията за претоварване на оператора трябва да бъде дефинирана като функция, която не е член.
Функцията за претоварване на оператора може да се превърне в функция за приятелство, ако изисква достъп до частните и защитени членове на класа. Например, операторът op е операторна функция, където op е операторът, който е претоварен, а операторът е ключовата дума. Претоварването на оператора може да бъде постигнато чрез внедряване на функция, която може да бъде или функция на член, функция на нечленуваща или приятелска функция.

Каква е разликата между функциите на оператора и нормалните функции?

Операторските функции са същите като нормалните функции. Единствената разлика е, че името на операторска функция винаги е ключова дума на оператора, последвано от символа на оператор и операторските функции се извикват, когато се използва съответният оператор.

Продължавайки с тази статия за претоварване на оператора в C ++.

Видове подходи за претоварване

Претоварването на оператора може да стане чрез използване на три подхода, те са

  • Претоварване на единичен оператор.
  • Претоварване на двоичен оператор.
  • Претоварване на двоичен оператор с помощта на функция приятел.

Продължавайки с тази статия за претоварване на оператора в C ++.

Претоварване на единния оператор

Нека разгледаме унарния оператор ‘-‘. Оператор минус, когато се използва като унарен, изисква само един операнд. Знаем, че този оператор променя знака на операнд, когато се прилага към основна променлива на данните. Нека видим как да претоварим този оператор, за да може той да бъде приложен към обект по същия начин, както е приложен към променлива int или float. Унарният минус, когато се прилага към обект, трябва да намалява всеки от неговите елементи от данни.

Пример:

длъжностна характеристика на разработчик на големи данни
#include използвайки пространство на имена std клас Height {public: // Член Обекти int фута, инч // Конструктор за инициализиране на стойността на обекта Height (int f, int i) {feet = f inch = i} // Оператор за претоварване (-) изпълнява декрементиране // операция на Height object void operator- () {футове-- инч-- cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Изход:

Обяснение:
В горния пример претоварваме унарния оператор ‘-’, за да извършим декрементиране в двете променливи от клас Height. Предаваме два параметъра на конструктора и запазваме стойностите им във футове и инчови променливи. След това дефинираме функцията за претоварване на оператора (void operator- ()
), при които двете променливи се декрементират с една позиция.
Когато пишем -h1, той извиква функцията за претоварване на оператора и намалява стойностите, предадени на конструктора.

Продължавайки с тази статия за претоварване на оператора в C ++.

Претоварване на двоичен оператор

Това е претоварване на оператор, работещ с два операнда. Да вземем същия пример за клас Height, но този път добавете два обекта Height h1 и h2.

Пример:

#include using space names std class Height {public: int feet, inch Height () {feet = 0 inch = 0} Height (int f, int i) {feet = f inch = i} // Оператор за претоварване (+) за изпълнение добавяне на // обект от две разстояния с помощта на двоичен оператор Height operator + (Height & d2) // Обаждане чрез референция {// Създаване на обект за връщане Height h3 // Извършване на добавяне на крака и инчове h3.feet = фута + d2.feet h3. inch = inch + d2.inch // Връщане на получения обект return h3}} int main () {Height h1 (3, 7) Height h2 (6, 1) Height h3 // Използвайте претоварен оператор h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Изход:

Обяснение:
Оператор на височина + (Височина & h2), тук return_type на функцията е клас Height, като по този начин връща обект h3 от клас Height. В реда h3 = h1 + h2, h1 извиква операторската функция на своите обекти от класове и приема h2 като параметър, след което прилагаме h3.feet = фута + d2.feet и h3.inch = инч + d2.inch, който съхранява сума от стойностите на променливите фута и инч в променливи, свързани с обекта h3.
Когато изразът ‘h3 = h1 + h2’ извиква претоварената от оператора функция, обектът h1 пое отговорността да извика функцията и h2 играе ролята на аргумент, който се предава на функцията. Горният оператор за извикване е еквивалентен на h3 = h1.operator + (h2), поради което членът на данните на h2 се осъществява директно и членът на данните на h2 (който се предава като аргумент) се използва с точков оператор.

Правила за претоварване на оператора

  • Само съществуващите оператори могат да бъдат претоварени и новите оператори не могат да бъдат претоварени
  • Претовареният оператор трябва да съдържа поне един операнд от дефинирания от потребителя тип данни.
  • Не използваме функция за приятелство, за да претоварим определени оператори. Функциите-членове обаче могат да се използват за претоварване на тези оператори.
  • Когато унарните оператори са претоварени чрез функция член, те не вземат изрични аргументи, но ако са претоварени от функция приятел, те вземат един аргумент.
  • Когато бинарните оператори са претоварени чрез функция член, те вземат един изричен аргумент, а ако са претоварени чрез функция приятел, те вземат два изрични аргумента.

По този начин стигнахме до края на тази статия за „Претоварване на оператора в C ++“. Ако искате да научите повече, разгледайте Java Training от Edureka, доверена компания за онлайн обучение. Edureka’s Курсът е предназначен да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този блог и ние ще се свържем с вас възможно най-скоро.