Dynamic_Cast C++

Dynamic Cast C



Динамичният каст в езика за програмиране C++ ще бъде обсъден в тази статия. Като начало трябва да разберем понятието кастинг и много видове кастинг. Процесът на промяна на типа данни на променлива е известен като кастинг. Кастингът е разделен на две категории в езика за програмиране C++: имплицитно кастинг и явно кастинг.

Преобразуване на типове данни в C++:

Преобразуването на типа е процедурата за промяна на типа данни към някакъв друг тип данни. Има два вида кастинг или преобразуване на тип в езика за програмиране C++: имплицитно и явно кастинг. Автоматизираното преобразуване на типове е друго име за имплицитно преобразуване на типове. Извършва се от компилатора по време на компилация в реално време и не се нуждае от потребителско въвеждане или действие. Когато има два вида данни в израз, възниква тази форма на кастинг. Например:

  Графичен потребителски интерфейс, текст, автоматично генерирано описание на приложението







В дадения код можем да видим, че целочислена променлива и символна променлива са вмъкнати в израза на последния ред и стойността на целочислената променлива „i“ е променена. Еквивалентът на ASCII числото на „a“ ще бъде преобразуван в стойност на символ и добавен към целочислената стойност на променливата „i“ в този оператор. Ако стойността на променливата “i” бъде отпечатана, резултатът ще бъде сбор от двете стойности. Компилаторът автоматично преобразува типа данни на символната променлива в целочислен тип данни, като го преобразува в стандартната ASCII стойност на азбуката отдясно, което е чудесен пример за имплицитно или автоматизирано преобразуване на тип по време на изпълнение.



Сега, когато става въпрос за изрично преобразуване на тип или преобразуване на тип, това не е автоматизиран процес; потребителят трябва ръчно да конвертира тип данни на променлива в друг тип променлива в кода. Типовете данни обикновено са подредени в йерархия въз основа на тяхното пространство в паметта и количеството информация, което могат да съдържат. Така че, когато тип данни от по-нисък порядък се използва за съхраняване на каквато и да е информация, но трябва да се трансформира в тип данни от по-висок порядък, така че загубата на информация да може да бъде сведена до минимум и да може да се съхранява повече и повече информация, обикновено се използва изрично преобразуване на типа или преобразуване на типа Свършен. Например, тъй като променлива с целочислен тип не може да съхранява стойности след десетичната запетая, може да загубим част от информацията, ако продължим да използваме променливи с цели числа. За да избегнем тази загуба, ние преобразуваме целочислената променлива в плаваща променлива, запазвайки стойности след десетичната запетая и предотвратявайки загуба на информация. Изричното преобразуване на типа в езика за програмиране C++ може да бъде осъществено по един от двата начина: чрез присвояване или чрез използване на оператора за предаване. Преобразуването на присвояването се извършва в кодов израз и синтаксисът за този израз е даден по-долу.



# „израз (тип данни)“

В горния код трябва да поставим валиден тип данни в скобата и след скобата трябва да напишем променливата или израза, който искаме да променим в типа данни, записан в скобата.





Сега ще разгледаме вида на преобразуването, извършено от операторите за преобразуване в езика за програмиране C++. Операторите за прехвърляне се наричат ​​още унарни оператори, които принуждават променлива да промени типа си данни от един съществуващ в друг. Има четири вида оператори за кастинг: Статично предаване, Динамично предаване, Константно предаване и Повторно интерпретиране.

Динамично кастинг в C++:

Динамичното кастинг в езика за програмиране C++ се основава на концепция, наречена RTTI (Идентификация на типа по време на изпълнение). RTTI е функция, присъстваща в няколко езика за програмиране като C/C++, Ada и Object Pascal. Идентификация или информация за типа по време на изпълнение е функция, която идентифицира и извлича информация относно подробностите за типа данни на обекта по време на изпълнение на програма. Тази функция предоставя безопасен път за методи за преобразуване на типове като функцията „typeid“ или динамично преобразуване на типове. Той открива информацията за типа данни по време на изпълнение и подпомага преобразуването на типа данни, когато операторите са в игра.



Динамичното кастинг се използва най-вече в C++ за безопасно кастинг по време на изпълнение. За да работи с динамичния каст, базовият клас трябва да има 1 виртуална функция. Динамичното предаване работи само с полиморфни базови класове, защото използва тази информация, за да определи безопасното предаване надолу. Динамичен оператор за кастинг прави динамично кастинг. Сега, след като знаем за концепциите, свързани с динамичното кастинг, можем да преминем към частта за изпълнение. Нека първо разгледаме синтаксиса за използване на динамично кастинг в езика за програмиране C++, който е написан по-долу:

# “dynamic_cast (Expression)”

В горния израз първата част описва името на оператора; в ъгловите скоби записваме името на типа данни, в който трябва да преобразуваме нашия израз, а в кръглите скоби записваме името на променливата или обекта, който искаме да конвертираме.

След като вече знаем как да използваме оператора за динамично преобразуване и да попълним параметрите за преобразуване на типове данни на променливи, можем да го използваме за преобразуване на типове данни на променливи.

Използване на метода на динамично предаване в Ubuntu 20.04:

За да приложим тази концепция, трябва да използваме няколко класа, с които да работим за преобразуване на обекти от класа чрез наследяване. Така че, за да направим това първо, първо трябва да знаем, че C++ програмният файл в средата на Ubuntu се съхранява с разширение „.cpp“, така че за да създадем този файл на нашия работен плот, отворете терминал и въведете „cd Desktop“ на команден ред, след това натиснете enter и въведете „touch filename .cpp“, за да създадете файл с разширение „.cpp“. Сега ще напишем код в този файл, за да създадем базов клас и 2 производни класа, а в кода на драйвера ще използваме оператора за динамично предаване.

  Графичен потребителски интерфейс, автоматично генерирано текстово описание

Излезте от файла, след като щракнете върху бутона за запазване. Върнете се в терминала и създайте файла с помощта на командата „g++“ с името на файла и разширението „.cpp“. С тази команда ще бъде създаден файл с разширение „.out“. Вече можете да стартирате този файл, като въведете „./“, последвано от вашето разширение „.out“.
  Автоматично генерирано текстово описание

В тази програма указателят на базовия клас съхранява извлечени обекти от клас 1 (d1). Динамичният базов клас на кастинг, указателят запази обекта Derived1 и го разпредели към производен клас 1, който предостави валидно динамично кастинг.

Заключение :

Тази статия ни научи на метода за преобразуване на типове, използван в езика за програмиране C++. Типът кастинг също беше обсъден подробно и се фокусирахме върху необходимостта защо използваме такива методи в програмирането на C++. Обсъдихме помощната функция, която помага за преобразуването на типа данни на променливата чрез извличане на информация и проверка за правилно преобразуване, наречена RTTI. Ние също внедрихме концепцията за динамично кастинг, като използвахме оператора за динамично кастинг в израз на езика за програмиране C++ в средата на Ubuntu 20.04.