Операторлорду ашык жүктөө
Камтылган операторлорду өз типтериңиз менен иштөөгө үйрөтүңүз
+, == же << сыяктуу оператор чындыгында символдук ат менен аталган функция гана. Класс жазып жатканда, сиз ошол функциянын өзүңүздүн версияңызды бере аласыз, ошондо 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 into a member call or a free-function call, depending on how you declared the operator.