Dynamic_Cast C++

Dynamic Cast C



הקאסט הדינמי בשפת התכנות C++ יידון במאמר זה. כדי להתחיל, עלינו להבין את הרעיון של ליהוק וסוגים רבים של ליהוק. תהליך שינוי סוג הנתונים של משתנה מכונה ליהוק. הליהוק מתחלק לשתי קטגוריות בשפת התכנות C++: ליהוק מרומז וליהוק מפורש.

המרת סוגי נתונים ב-C++:

ליהוק סוג הוא הליך של שינוי סוג הנתונים לסוג נתונים אחר. ישנם שני סוגים של ליהוק או המרת סוג בשפת התכנות C++: ליהוק מרומז ומפורש. המרת סוגים אוטומטית היא שם נוסף ל-typecasting מרומז. הוא מבוצע על ידי המהדר במהלך הידור בזמן אמת ואינו זקוק לשום קלט או פעולה של המשתמש. כאשר ישנם שני סוגי נתונים בביטוי, צורת הליהוק הזו מתרחשת. לדוגמה:

  ממשק משתמש גרפי, טקסט, אפליקציה תיאור נוצר אוטומטית







בקוד הנתון, אנו יכולים לראות כי משתנה מספר שלם ומשתנה תו מוכנסים בביטוי השורה האחרונה, והערך של המשתנה השלם 'i' משתנה. המקבילה למספר ASCII של 'a' תומר לערך תו ויתווסף לערך השלם של המשתנה 'i' בהצהרה זו. אם הערך של המשתנה 'i' מודפס, התוצאה תהיה סך של שני הערכים הללו. המהדר הופך אוטומטית את סוג הנתונים של משתנה התו לסוג נתונים שלמים על ידי המרתו לערך הסטנדרטי ASCII של האלפבית בצד ימין, שהוא דוגמה מצוינת להמרת סוג מרומז או אוטומטי בזמן הריצה.



כעת, כשזה מגיע ליציקת טיפוס מפורשת או המרת טיפוס, זה לא תהליך אוטומטי; על המשתמש להמיר ידנית סוג נתונים של משתנה לסוג אחר של משתנה בקוד. סוגי הנתונים מסודרים בדרך כלל בהיררכיה על סמך שטח הזיכרון שלהם וכמות המידע שהם יכולים להחזיק. לכן, כאשר משתמשים בסוג נתונים מסדר נמוך יותר לאחסון מידע כלשהו, ​​אך יש להפוך אותו לסוג נתונים מסדר גבוה יותר, כך שניתן למזער אובדן מידע ולאחסן עוד ועוד מידע, בדרך כלל ליהוק סוג מפורש או המרת סוג בוצע. לדוגמה, מכיוון שמשתנה מסוג מספר שלם אינו יכול לאחסן ערכים לאחר הנקודה העשרונית, אנו עלולים לאבד מידע אם נמשיך להשתמש במשתנים שלמים. כדי למנוע אובדן זה, אנו ממירים את המשתנה השלם למשתנה צף, שומרים ערכים לאחר נקודות עשרוניות ומונעים אובדן מידע. המרת הסוג המפורש בשפת התכנות C++ עשויה להתבצע באחת משתי דרכים: באמצעות הקצאה או על ידי שימוש באופרטור הקאסט. המרת ההקצאה מתבצעת בביטוי קוד, והתחביר עבור ביטוי זה מסופק להלן.



# 'ביטוי (סוג נתונים)'

בקוד לעיל, עלינו לשים סוג נתונים חוקי בתוך סוגריים, ואחרי סוגר, עלינו לכתוב את המשתנה או הביטוי שאנו רוצים לשנות לסוג הנתונים שנכתב בתוך הסוגר.





כעת נבחן את סוג ההמרה שנעשה על ידי מפעילי הקאסט בשפת התכנות C++. אופרטורי Cast נקראים גם אופרטורים אונריים שמכריחים משתנה לשנות את סוג הנתונים שלו מאחד קיים לאחר. ישנם ארבעה סוגים של מפעילי ליהוק: ליהוק סטטי, ליהוק דינמי, ליהוק קבוע ו-Re-interpret cast.

ליהוק דינמי ב-C++:

ליהוק דינמי בשפת התכנות C++ מבוסס על תפיסה הנקראת RTTI(Run Time Type Identification). RTTI היא פונקציה הקיימת במספר שפות תכנות כמו C/C++, Ada ו-Object Pascal. זיהוי סוג זמן ריצה או מידע הוא פונקציה המזהה ומחלצת את המידע לגבי הפרטים של סוג הנתונים של אובייקט על זמן הריצה של תוכנית. פונקציה זו מספקת נתיב בטוח לשיטות ליהוק סוגים כמו פונקציית 'typeid' או ליהוק סוג דינמי. זה מזהה את המידע על סוג הנתונים על זמן הריצה ומסייע להמרה של סוג הנתונים כאשר האופרטורים נמצאים במשחק.



הליהוק הדינמי משמש בעיקר ב-C++ עבור יציקה בטוחה בזמן ריצה. כדי לעבוד עם הקאסט הדינמי, למחלקת הבסיס חייבת להיות פונקציה וירטואלית אחת. הליהוק הדינמי עובד רק עם מחלקות בסיס פולימורפיות מכיוון שהוא משתמש במידע הזה כדי לקבוע יציקה בטוחה למטה. מפעיל ליהוק דינמי עושה ליהוק דינמי. עכשיו כשאנחנו יודעים על המושגים הקשורים לליהוק דינמי, אנחנו יכולים ללכת לחלק היישום. הבה נסתכל תחילה על התחביר לשימוש בליהוק דינמי בשפת התכנות C++, אשר כתוב להלן:

# 'dynamic_cast (Expression)'

בביטוי לעיל, החלק הראשון מתאר את שם המפעיל; בסוגריים של הזווית, אנו כותבים את השם של סוג הנתונים שאליו אנו צריכים להמיר את הביטוי שלנו, ובסוגריים העגולים, אנו כותבים את שם המשתנה או האובייקט שאנו רוצים להמיר.

כעת, כשאנחנו יודעים להשתמש באופרטור ה-cast dynamic ולמלא את הפרמטרים להמרת סוגי נתונים של משתנים, נוכל להשתמש בו כדי להמיר סוגי נתונים של משתנים.

שימוש בשיטת cast Dynamic באובונטו 20.04:

כדי ליישם את המושג הזה, עלינו להשתמש במספר מחלקות לעבוד איתן להמרת אובייקטים של המחלקה על ידי ירושה. לכן, כדי לעשות זאת תחילה, עלינו לדעת תחילה שקובץ התוכנית C++ בסביבת אובונטו מאוחסן עם הסיומת '.cpp', אז כדי ליצור קובץ זה על שולחן העבודה שלנו, פתח מסוף והקלד 'cd Desktop' ב- שורת הפקודה, ולאחר מכן הקש enter והקלד 'touch filename .cpp' כדי ליצור קובץ עם הסיומת '.cpp'. כעת נכתוב קוד בקובץ הזה כדי ליצור מחלקה בסיסית ו-2 מחלקות נגזרות, ובקוד הדרייבר, נשתמש באופרטור ה-cast dynamic.

  ממשק משתמש גרפי, טקסט תיאור נוצר באופן אוטומטי

צא מהקובץ לאחר לחיצה על כפתור השמירה. חזור למסוף ובנה את הקובץ באמצעות הפקודה 'g++' עם שם הקובץ שלך והסיומת '.cpp'. קובץ עם הסיומת '.out' ייווצר באמצעות פקודה זו. כעת תוכל להפעיל את הקובץ על ידי הזנת './' ואחריו סיומת '.out'.
  תיאור טקסט נוצר באופן אוטומטי

בתוכנית זו, מצביע המחלקה הבסיסית מאחסן אובייקטים מחלקה 1 (d1) נגזרים. מחלקת הבסיס של הליהוק הדינמי, המצביע שמר על האובייקט Derived1 והקצה אותו למחלקה נגזרת 1, מה שסיפק ליהוק דינמי חוקי.

סיכום :

מאמר זה לימד אותנו את שיטת הליהוק המשמשת בשפת התכנות C++. גם סוג הליהוק נדון בפירוט, והתמקדנו בצורך מדוע אנו משתמשים בשיטות כאלה בתכנות C++. דנו בפונקציית הסיוע שעוזרת להמרה של סוג הנתונים של המשתנה על ידי שליפת מידע ואימות המרה נכונה הנקראת RTTI. הטמענו גם את הרעיון של ליהוק דינמי על ידי שימוש באופרטור הליהוק הדינמי בביטוי בשפת התכנות C++ בסביבת אובונטו 20.04.