Dynamic_Cast C++

Dynamic Cast C



ไดนามิกแคสต์ในภาษาโปรแกรม C++ จะกล่าวถึงในบทความนี้ ในการเริ่มต้น เราต้องเข้าใจแนวคิดของการหล่อและการหล่อประเภทต่างๆ กระบวนการแก้ไขชนิดข้อมูลของตัวแปรเรียกว่าการแคสต์ การแคสต์แบ่งออกเป็นสองประเภทในภาษาโปรแกรม C++: การแคสต์โดยปริยายและการแคสต์แบบโจ่งแจ้ง

การแปลงประเภทข้อมูลใน C ++:

Type Casting เป็นขั้นตอนของการเปลี่ยนแปลงประเภทข้อมูลเป็นประเภทข้อมูลอื่น การแคสต์หรือการแปลงประเภทในภาษาโปรแกรม C++ มีอยู่สองประเภท: การแคสต์แบบโดยปริยายและแบบโจ่งแจ้ง การแปลงประเภทอัตโนมัติเป็นอีกชื่อหนึ่งสำหรับการพิมพ์โดยปริยาย ดำเนินการโดยคอมไพเลอร์ระหว่างการคอมไพล์ตามเวลาจริงและไม่ต้องการการป้อนข้อมูลหรือการดำเนินการจากผู้ใช้ เมื่อมีประเภทข้อมูลสองประเภทในนิพจน์ การหล่อรูปแบบนี้จะเกิดขึ้น ตัวอย่างเช่น:

  ส่วนติดต่อผู้ใช้แบบกราฟิก ข้อความ คำอธิบายแอปพลิเคชันที่สร้างขึ้นโดยอัตโนมัติ







ในโค้ดที่กำหนด เราจะเห็นว่าตัวแปรจำนวนเต็มและตัวแปรอักขระถูกแทรกในนิพจน์บรรทัดสุดท้าย และค่าของตัวแปรจำนวนเต็ม “i” เปลี่ยนไป ตัวเลข ASCII ที่เทียบเท่ากับ “a” จะถูกแปลงเป็นค่าอักขระและเพิ่มเป็นค่าจำนวนเต็มของตัวแปร “i” ในคำสั่งนี้ หากพิมพ์ค่าของตัวแปร “i” ผลลัพธ์จะเป็นผลรวมของทั้งสองค่านี้ คอมไพลเลอร์แปลงประเภทข้อมูลของตัวแปรอักขระเป็นประเภทข้อมูลจำนวนเต็มโดยอัตโนมัติโดยแปลงเป็นค่ามาตรฐาน ASCII ของตัวอักษรทางด้านขวา ซึ่งเป็นตัวอย่างที่ดีของการแปลงประเภทโดยนัยหรือแบบอัตโนมัติในขณะรันไทม์



ตอนนี้ เมื่อพูดถึงการคัดแยกประเภทที่ชัดเจนหรือการแปลงประเภท มันไม่ใช่กระบวนการอัตโนมัติ ผู้ใช้ต้องแปลงชนิดข้อมูลของตัวแปรเป็นตัวแปรชนิดอื่นในโค้ดด้วยตนเอง โดยปกติแล้ว ชนิดข้อมูลจะจัดเรียงเป็นลำดับชั้นตามพื้นที่หน่วยความจำและจำนวนข้อมูลที่สามารถเก็บได้ ดังนั้น เมื่อใช้ประเภทข้อมูลลำดับที่ต่ำกว่าเพื่อจัดเก็บข้อมูลใด ๆ แต่ต้องแปลงเป็นประเภทข้อมูลลำดับที่สูงกว่า เพื่อลดการสูญเสียข้อมูลให้เหลือน้อยที่สุด และสามารถเก็บข้อมูลได้มากขึ้นเรื่อย ๆ การคัดแยกประเภทที่ชัดเจนหรือการแปลงประเภทเป็นเรื่องปกติ เสร็จแล้ว. ตัวอย่างเช่น เนื่องจากตัวแปรประเภทจำนวนเต็มไม่สามารถเก็บค่าหลังจุดทศนิยมได้ เราอาจสูญเสียข้อมูลบางอย่างหากเราใช้ตัวแปรจำนวนเต็มต่อไป เพื่อหลีกเลี่ยงการสูญเสียนี้ เราจะแปลงตัวแปรจำนวนเต็มเป็นตัวแปรจำนวนจริง การบันทึกค่าหลังจุดทศนิยมและป้องกันการสูญหายของข้อมูล การแปลงประเภทอย่างชัดเจนในภาษาโปรแกรม C++ อาจทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี: ผ่านการมอบหมายหรือโดยการใช้ตัวดำเนินการแคสต์ การแปลงการกำหนดเสร็จสิ้นในนิพจน์รหัส และไวยากรณ์สำหรับนิพจน์นี้มีให้ด้านล่าง



# 'นิพจน์ (ชนิดข้อมูล)'

ในโค้ดข้างต้น เราต้องใส่ประเภทข้อมูลที่ถูกต้องในวงเล็บ และหลังวงเล็บ เราต้องเขียนตัวแปรหรือนิพจน์ที่เราต้องการแก้ไขลงในประเภทข้อมูลที่เขียนไว้ในวงเล็บ





ตอนนี้เราจะพิจารณาประเภทของการแปลงที่ทำโดยตัวดำเนินการแคสต์ในภาษาโปรแกรม C++ ตัวดำเนินการคาสต์เรียกอีกอย่างว่าตัวดำเนินการยูนารีที่บังคับให้ตัวแปรเปลี่ยนประเภทข้อมูลจากที่มีอยู่เป็นอีกตัวแปรหนึ่ง ตัวดำเนินการการแคสต์มีสี่ประเภท ได้แก่ การแคสต์แบบคงที่ การแคสต์แบบไดนามิก การแคสต์แบบ Const และการตีความการแคสต์ซ้ำ

การหล่อแบบไดนามิกใน C ++:

การแคสต์แบบไดนามิกในภาษาการเขียนโปรแกรม C++ นั้นขึ้นอยู่กับแนวคิดที่เรียกว่า RTTI (การระบุประเภทเวลารัน) RTTI เป็นฟังก์ชันที่มีอยู่ในภาษาโปรแกรมต่างๆ เช่น C/C++, Ada และ Object Pascal การระบุประเภทรันไทม์หรือข้อมูลเป็นฟังก์ชันที่ระบุและแยกข้อมูลเกี่ยวกับรายละเอียดของประเภทข้อมูลของออบเจกต์ในเวลาทำงานของโปรแกรม ฟังก์ชันนี้จัดเตรียมพาธที่ปลอดภัยสำหรับวิธีการแคสต์ประเภท เช่น ฟังก์ชัน 'typeid' หรือการแคสต์ประเภทไดนามิก จะตรวจจับข้อมูลประเภทข้อมูลในเวลาดำเนินการและช่วยในการแปลงประเภทข้อมูลเมื่อตัวดำเนินการอยู่ในการเล่น



ไดนามิกแคสติ้งส่วนใหญ่จะใช้ใน C++ สำหรับการแคสต์แบบปลอดภัยในขณะรันไทม์ ในการทำงานกับไดนามิกแคสต์ คลาสพื้นฐานต้องมี 1 ฟังก์ชันเสมือน ไดนามิกแคสต์ใช้งานได้เฉพาะกับคลาสฐานโพลีมอร์ฟิค เพราะใช้ข้อมูลนี้เพื่อพิจารณาการแคสติ้งที่ปลอดภัย ตัวดำเนินการแคสต์แบบไดนามิกทำการแคสต์แบบไดนามิก ตอนนี้เรารู้เกี่ยวกับแนวคิดที่เกี่ยวข้องกับไดนามิกแคสติ้งแล้ว เราสามารถไปยังส่วนการนำไปใช้งานได้ อันดับแรก ให้เราดูที่ไวยากรณ์สำหรับการใช้ไดนามิกแคสติ้งในภาษาโปรแกรม C++ ซึ่งเขียนไว้ด้านล่าง:

# “dynamic_cast (นิพจน์)”

ในนิพจน์ข้างต้น ส่วนแรกจะอธิบายชื่อของตัวดำเนินการ ในวงเล็บเหลี่ยม เราเขียนชื่อประเภทข้อมูลที่เราต้องการแปลงนิพจน์ของเรา และในวงเล็บเหลี่ยม เราเขียนชื่อตัวแปรหรือวัตถุที่เราต้องการแปลง

ตอนนี้เรารู้วิธีใช้ตัวดำเนินการไดนามิกแคสต์และกรอกพารามิเตอร์สำหรับการแปลงประเภทข้อมูลของตัวแปรแล้ว เราสามารถใช้มันเพื่อแปลงประเภทข้อมูลของตัวแปรได้

ใช้วิธีการส่งแบบไดนามิกใน 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