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

Типтерди айландыруу жана кастинг

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

Типтерди айландыруу жана кастинг

Бир типти экинчисине айландыруу - коопсуз, атайылап жана чын эле кааласаң гана

Негизги ой: C++ - катуу типтештирилген тил, бирок чыныгы программалар маанилерди типтердин ортосунда дайыма которот: int ти double ко, базалык класстын көрсөткүчүн туунду класстын көрсөткүчүнө, API дескрипторун бүтүн санга. Бул айландыруулардын бир бөлүгү көзгө көрүнбөй болот (компилятор аларды өзү коёт), ал эми бир бөлүгүн сен кастинг менен ачык суранышың керек. Компилятор сенин артыңдан кайсы айландырууларды жасаарын, ал эми сен башкарууну колго алганда төрт аталган кастингдин кайсынысын тандаарыңды билүү - тууралыгы далилденген код менен маалыматты тынч бузган коддун ортосундагы айырма.
Сабактын аягында сен төмөнкүлөрдү үйрөнөсүң:
  • кыйыр айландырууларды таанып, коркунучтуу тарытууну байкоону,
  • каалабаган айландырууларды токтотуу үчүн explicit ачкыч сөзүн колдонууну,
  • static_cast, dynamic_cast, const_cast жана reinterpret_cast тин ортосунан туура тандоону,
  • заманбап C++ те эски C стилиндеги (T)x кастинги эмне үчүн сунушталбаарын түшүндүрүүнү.

1. Кыйыр айландыруулар жана тарытуу

Кыйыр айландыруу - бул компилятор автоматтык түрдө, сен кастинг жазбастан аткарган айландыруу. Алардын көбү зыянсыз жана пайдалуу: int ти double ко ыйгаруу же int күтүлгөн жерге char берүү. Булар жогорулатуу же кеңейтүү айландыруулары - кабылдоочу тип баштапкы типтин ар бир маанисин чагылдыра алат, ошондуктан эч нерсе жоголбойт.

Коркунуч - тескери багытта: тарытуучу айландыруу, мында кабылдоочу тип баштапкы типтин ар бир маанисин сактай албайт. double ту int ке ыйгаруу бөлчөк бөлүгүн ыргытат; чоң int ти short ко ыйгаруу ашып кетип, маанисиз санга айланышы мүмкүн. Компилятор адатта муну үнсүз уруксат берет жана эң жакшы дегенде эскертүү чыгарат.

double pi = 3.14159;
int    n  = pi;        // тарытуу: n 3 болот, .14159 бөлүгү жоголот
long   big = 100000;
short  s  = big;       // тарытуу: ашып кетиши мүмкүн, маани реализацияга көз каранды

Заманбап C++ сага коопсуздук берет: фигуралык кашаа менен инициализациялоо {} тарытуучу айландырууну үнсүз тосин эмес, компиляция катасына айлантат. Бул инициализация үчүн фигуралык кашааны артык көрүүнүн эң мыкты себептеринин бири.

int a = 3.9;     // компиляцияланат: a 3 ке барабар (үнсүз тарытуу)
int b{3.9};      // КАТА: { } ичинде тарытуучу айландырууга уруксат жок

Кыйыр айландыруулар айландыруучу конструкторлор аркылуу да болот. Эгер класста бир аргументтүү конструктор болсо, компилятор аны колдонуп, ошол аргументтин типин сенин классыңа үнсүз айландырышы мүмкүн - кийинки бөлүм так ушуну башкарууну үйрөтөт.

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

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

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

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