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

Шилтемелер жана const-тууралык

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

Шилтемелер жана const-тууралык

Өзгөрмөгө экинчи ат бериңиз, ал эми const ниетиңизди коргосун

Негизги идея: Шилтеме — бул псевдоним, мурунтан бар объектке байланган жана анын өзгөчөлүгүн бөлүшкөн экинчи ат. const кошсоңуз, компилятор текшере турган убада аласыз: "муну окуйм, бирок өзгөртпөйм". Шилтемелер жана const чогуу чоң объекттерди арзан өткөрүүгө, өзүн-өзү документтеген интерфейстерди жазууга жана каталардын бүтүндөй классын продакшенде түнкү 3тө эмес, компиляция учурунда кармоого мүмкүндүк берет.
Бул сабактын аягында сиз төмөнкүлөрдү жасай аласыз:
  • lvalue-шилтеме деген эмне жана ал көрсөткүчтөн эмнеси менен айырмаланарын түшүндүрө аласыз,
  • параметрлерди const-шилтеме аркылуу өткөрүп, көчүрмөлөрдөн качып, өзгөртүү тобокелине барбайсыз,
  • const-методдорду жаза аласыз жана алар эмнени кепилдээрин түшүнөсүз,
  • const-тууралык чоң программаларды эмне үчүн коопсузураак жана түшүнүктүүрөк кыларын талкуулайсыз.

1. Шилтеме деген эмне?

lvalue-шилтеме — бул мурунтан бар объектке шилтеген ат. int& r = x; деп жазганыңызда сиз x тин көчүрмөсүн жасабайсыз жана жаңы объект түзбөйсүз — сиз ошол эле объектке экинчи ат бересиз. Ошол учурдан баштап r жана x — эстутумдагы бир уячанын эки этикеткасы.

Шилтемени эки эреже аныктайт жана аны C++ тин башка ар кандай куралынан айырмалайт:

  • Ал сөзсүз инициализацияланышы керек. Инициализацияланбаган шилтеме деген жок. int& r; компиляцияланбайт — шилтеме жаралган учурунда бир нерсеге байланышы керек.
  • Аны эч качан кайра байлоого болбойт. r бир жолу x ке шилтесе, ал бүт өмүрү бою x ке шилтейт. r = y; деп жазуу r ди y ге көрсөтпөйт; ал y дин маанисин x ке көчүрөт.
#include <iostream>

int main() {
    int x = 10;
    int& r = x;      // r - x тин башка аты
    r = 20;          // r аркылуу жазуу -> x ти өзгөртөт
    std::cout << x << '\n';   // 20 басып чыгарат

    int y = 99;
    r = y;           // кайра байлоо ЭМЕС: y дин маанисин x ке көчүрөт
    std::cout << x << '\n';   // 99 басып чыгарат
    std::cout << &r << " == " << &x << '\n'; // бирдей дарек
}

r жана x бир даректи бөлүшкөндүктөн, &r жана &x алуу бирдей көрсөткүч берет. Шилтеменин байкала турган өз алдынча эстутуму жок — ал чындыгында башка ат астындагы ошол эле объект.

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

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

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

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