Мазмунга өтүү

Операторлорду ашык жүктөө

Сабактын башталышы

Операторлорду ашык жүктөө

Камтылган операторлорду өз типтериңиз менен иштөөгө үйрөтүңүз

Негизги идея: C++ тилинде +, == же << сыяктуу оператор чындыгында символдук ат менен аталган функция гана. Класс жазып жатканда, сиз ошол функциянын өзүңүздүн версияңызды бере аласыз, ошондо a + b, a == b же cout << a сиздин типиңиз үчүн маанилүү иштейт — так int жана string үчүн болгондой.
Бул теманын аягында сиз төмөнкүлөрдү жасай аласыз:
  • өз классыңыз үчүн арифметикалык жана салыштыруу операторлорун (+, ==, <) ашык жүктөө,
  • метод-оператор менен эркин (класска кирбеген) оператордун ортосунан туура тандоо,
  • агымдар үчүн operator<< ашык жүктөө жана жеке маалымат керек болгондо friend колдонуу,
  • const-тууралыгын сактоо жана туура кайтаруу типтерин тандоо (маани же шилтеме),
  • эмне кыла албай тургандыгыңызды түшүнүү жана C++20дун <=> кыскартуусун колдонуу.

1. Оператор — бул жашырынган функция

Компиляторду котормочу катары элестетиңиз. Ал a + b дегенди көргөндө, сиздин классыңыз үчүн «плюс» деген алдын ала белгиленген түшүнүгү жок. Анын ордуна ал ушул типтеги операнддарды кабыл алган, түз эле operator+ деп аталган функцияны издейт. Тапса — чакырат; таппаса — код компиляцияланбайт.

Салыштыруу. + белгиси «бириктирүү» деген сөзгө окшош. Сандар үчүн «бириктирүү» кошуу дегенди билдирет. Саптар үчүн — улоо. Соода себети үчүн ал «эки себетти кошуу» дегенди билдириши мүмкүн. Белги ошол бойдон калат, бирок бириктирүү сиздин типиңиз үчүн эмнени билдирерин сиз чечесиз — бир этиш ар кандай контекстте ар кандай милдет аткаргандай.

Дал ушул колдонуучу типтерин толук укуктуу кылат. Money, Vector2D же Matrix дегенди int сыяктуу эле таза синтаксис менен кошууга, салыштырууга жана басып чыгарууга болот — бардык жерде a.add(b) чакыруунун ордуна.

a + b source you write member operator free operator a.operator+(b) left operand = this operator+(a, b) both operands = params Same result. The compiler chooses whichever overload you defined for these operand types.
The compiler rewrites a + b into a member call or a free-function call, depending on how you declared the operator.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө