סעיף זה ידון בסוג הליהוק של המשתנים בשפת התכנות C++. ליהוק סוג מתייחס להמרה של סוג נתונים אחד לאחר בתוכנית. Typecasting יכול להתבצע בשתי דרכים: אוטומטית על ידי המהדר וידני על ידי המתכנת או המשתמש. Type Casting ידוע גם בשם Type Conversion.
לדוגמה, נניח שהנתונים הנתונים הם סוג של מספר שלם, ואנו רוצים להמיר אותם לסוג צף. אז, אנחנו צריכים להטיל ידנית נתוני int לסוג ה-float, וסוג זה של ליהוק נקרא Type Casting ב-C++.
int num = 5; float x; x = float(num); x = 5.0
2נדדוגמא:
float num = 5.25; int x; x = int(num); Output: 5
ליהוק סוג מתחלק לשני סוגים: המרה מרומזת או ליהוק סוג מרומז והמרת סוג מפורש או ליהוק סוג מפורש.
ליהוק סוג מרומז או המרת סוג מרומז
- זה ידוע בשם יציקה מהסוג האוטומטי.
- זה הומר אוטומטית מסוג נתונים אחד לאחר ללא כל התערבות חיצונית כגון מתכנת או משתמש. זה אומר שהמהדר ממיר אוטומטית סוג נתונים אחד לאחר.
- כל סוגי הנתונים משודרגים אוטומטית לסוג הגדול ביותר מבלי לאבד מידע כלשהו.
- זה יכול לחול רק בתוכנית אם שני המשתנים תואמים זה לזה.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
הערה: יש לבצע יציקת סוגים מרומזים מסוגי נתונים נמוכים לגבוהים יותר. אחרת, זה משפיע על סוג הנתונים הבסיסי, שעלול לאבד דיוק או נתונים, והמהדר עשוי להבהב אזהרה על כך.
תוכנית להשתמש בליהוק הסוג המרומז ב-C++
בואו ניצור דוגמה כדי להדגים את הליהוק של משתנה אחד למשנהו באמצעות הליהוק מהסוג המרומז ב-C++.
#include using namespace std; int main () { short x = 200; int y; y = x; cout << ' Implicit Type Casting ' << endl; cout << ' The value of x: ' << x << endl; cout << ' The value of y: ' << y << endl; int num = 20; char ch = 'a'; int res = 20 + 'a'; cout << ' Type casting char to int data type ('a' to 20): ' << res << endl; float val = num + 'A'; cout << ' Type casting from int data to float type: ' << val << endl; return 0; }
תְפוּקָה:
Implicit Type Casting The value of x: 200 The value of y: 200 Type casting char to int data type ('a' to 20): 117 Type casting from int data to float type: 85
בתוכנית לעיל, הכרזנו על משתנה מסוג נתונים קצר x הוא 200 ועל משתנה מספר שלם y. לאחר מכן, אנו מקצים ערך x ל-y, ואז המהדר ממיר אוטומטית את ערך הנתונים הקצר x ל-y, מה שמחזיר y הוא 200.
בביטויים הבאים, הכרזנו שמשתנה מסוג int num הוא 20, ומשתנה סוג התו ch הוא 'a', שהוא שווה ערך לערך שלם של 97. ואז, נוסיף את שני המשתנים האלה כדי לבצע את ההמרה המרומזת, שמחזירה את התוצאה של הביטוי היא 117.
שאלות ראיון ב-java
באופן דומה, בביטוי השלישי, נוסיף את משתנה המספר השלם num הוא 20, ואת משתנה התו ch הוא 65, ולאחר מכן מקצים את התוצאה למשתנה הצוף val. כך תוצאת הביטוי מומרת אוטומטית לסוג float על ידי המהדר.
ליהוק סוג מפורש או המרה מסוג מפורש
- זה ידוע גם בשם הליהוק הידני בתוכנית.
- הוא מטיל ידנית על ידי המתכנת או המשתמש כדי לשנות מסוג נתונים אחד לסוג אחר בתוכנית. זה אומר שמשתמש יכול בקלות להעביר נתונים אחד למשנהו בהתאם לדרישה בתוכנית.
- זה לא מצריך בדיקת תאימות של המשתנים.
- בליהוק זה, אנו יכולים לשדרג או לשדרג לאחור את סוג הנתונים של משתנה אחד לאחר בתוכנית.
- הוא משתמש באופרטור cast () כדי לשנות את סוג המשתנה.
תחביר של ליהוק מהסוג המפורש
(type) expression;
סוּג: הוא מייצג את הנתונים המוגדרים על ידי המשתמש הממירים את הביטוי הנתון.
ביטוי: הוא מייצג את הערך הקבוע, המשתנה או הביטוי שסוג הנתונים שלו מומר.
לדוגמה, יש לנו מספר מצביע צף הוא 4.534, וכדי להמיר ערך שלם, ההצהרה כ:
int num; num = (int) 4.534; // cast into int data type cout << num;
כאשר ההצהרות לעיל מבוצעות, ערך הנקודה הצפה יוזרק לסוג נתונים של מספר שלם באמצעות האופרטור cast (). והערך הצף מוקצה למספר שלם שקוצר את החלק העשרוני ומציג רק 4 כערך השלם.
תוכנית להדגים את השימוש בליהוק מסוג מפורש ב-C++
git להוסיף הכל
בואו ניצור תוכנית פשוטה כדי להטיל משתנה סוג אחד לסוג אחר באמצעות ליהוק הסוג המפורש בשפת התכנות C++.
#include using namespace std; int main () { // declaration of the variables int a, b; float res; a = 21; b = 5; cout << ' Implicit Type Casting: ' << endl; cout << ' Result: ' << a / b << endl; // it loses some information cout << ' Explicit Type Casting: ' << endl; // use cast () operator to convert int data to float res = (float) 21 / 5; cout << ' The value of float variable (res): ' << res << endl; return 0; }
תְפוּקָה:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
בתוכנית לעיל, ניקח שני משתנים שלמים, a ו-b, שהערכים שלהם הם 21 ו-2. ואז, מחלקים את a ב-b (21/2) שמחזיר ערך מסוג 4 int.
בביטוי השני, אנו מכריזים על משתנה מסוג float res המאחסן את התוצאות של a ו-b מבלי לאבד נתונים כלשהם באמצעות האופרטור cast בשיטת cast type explicit.
תוכנית להטיל נתונים כפולים לסוג int ו-float באמצעות אופרטור ה-cast
הבה נשקול דוגמה כדי לקבל את השטח של המלבן על ידי יציקת נתונים כפולים ל-float ו-int type בתכנות C++.
לא שווה mysql
#include using namespace std; int main () { // declaration of the variables double l, b; int area; // convert double data type to int type cout << ' The length of the rectangle is: ' <> l; cout << ' The breadth of the rectangle is: ' <> b; area = (int) l * b; // cast into int type cout << ' The area of the rectangle is: ' << area << endl; float res; // convert double data type to float type cout << ' The length of the rectangle is: ' << l << endl; cout << ' The breadth of the rectangle is: ' << b << endl; res = (float) l * b; // cast into float type cout << ' The area of the rectangle is: ' << res; return 0; }
תְפוּקָה:
The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 740 The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 744.77
כמה סוגים שונים של ליהוק סוג
ב-type cast, קיים אופרטור cast שמאלץ להמיר סוג נתונים אחד לסוג נתונים אחר בהתאם לצרכי התוכנית. ל-C++ יש ארבעה סוגים שונים של אופרטור השחקנים:
- סטטי_cast
- cast_dynamic
- const_cast
- לפרש_קאסט מחדש
שחקנים סטטיים:
ה-static_cast הוא קאסט פשוט בזמן הידור הממיר או מטיל סוג נתונים אחד לאחר. זה אומר שהוא לא בודק את סוג הנתונים בזמן הריצה אם ההעברה שבוצעה חוקית או לא. לפיכך על המתכנת או המשתמש מוטלת האחריות לוודא שההמרה הייתה בטוחה ותקפה.
ה-static_cast מסוגל לבצע את כל ההמרות שבוצעו על ידי הקאסט המרומז. והוא גם מבצע את ההמרות בין מצביעים של מחלקות הקשורות זה לזה (מעלה - > ממעמד נגזר לבסיס או מחלקה נגזרת - > מכיתה נגזרת).
תחביר של השחקנים הסטטיים
static_cast (expression);
תוכנית להדגמת השימוש בקאסט הסטטי
בואו ניצור דוגמה פשוטה לשימוש בקאסט הסטטי מסוג ליהוק בתכנות C++.
הערות מגף אביב
#include using namespace std; int main () { // declare a variable double l; l = 2.5 * 3.5 * 4.5; int tot; cout << ' Before using the static cast:' << endl; cout << ' The value of l = ' << l << endl; // use the static_cast to convert the data type tot = static_cast (l); cout << ' After using the static cast: ' << endl; cout << ' The value of tot = ' << tot << endl; return 0; }
תְפוּקָה:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
קאסט דינמי
ה-dynamic_cast הוא אופרטור cast בזמן ריצה המשמש לביצוע המרה של משתנה מסוג אחד למשנהו רק על מצביעי מחלקות והפניות. זה אומר שהוא בודק את הליהוק התקף של המשתנים בזמן הריצה, ואם הליהוק נכשל, הוא מחזיר ערך NULL. הליהוק הדינמי מבוסס על מנגנון RTTI (Runtime Type Identification).
תוכנית להדגמת השימוש ב-Dynamic Cast ב-C++
בואו ניצור תוכנית פשוטה לביצוע ה-dynamic_cast בשפת התכנות C++.
#include using namespace std; class parent { public: virtual void print() { } }; class derived: public parent { }; int main () { // create an object ptr parent *ptr = new derived; // use the dynamic cast to convert class data derived* d = dynamic_cast (ptr); // check whether the dynamic cast is performed or not if ( d != NULL) { cout << ' Dynamic casting is done successfully'; } else { cout << ' Dynamic casting is not done successfully'; } }
תְפוּקָה:
Dynamic casting is done successfully.
פרש מחדש את סוג Cast
הליהוק מסוג reinterpret_cast משמש כדי להטיל מצביע לכל סוג אחר של מצביע בין אם המצביע הנתון שייך זה לזה או לא. זה אומר שהוא לא בודק אם המצביע או הנתונים שאליהם מצביע המצביע זהים או לא. והוא גם מטיל מצביע לסוג של מספר שלם או להיפך.
תחביר מסוג reinterpret_cast
reinterpret_cast expression;
תוכנית להשתמש ב-Reinterpret Cast ב-C++
בואו נכתוב תוכנית להדגמת המרה של מצביע באמצעות הפירוש מחדש בשפת C++.
#include using namespace std; int main () { // declaration of the pointer variables int *pt = new int (65); // use reinterpre_cast operator to type cast the pointer variables char *ch = reinterpret_cast (pt); cout << ' The value of pt: ' << pt << endl; cout << ' The value of ch: ' << ch << endl; // get value of the defined variable using pointer cout << ' The value of *ptr: ' << *pt << endl; cout << ' The value of *ch: ' << *ch << endl; return 0; }
תְפוּקָה:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Cast
ג'אווה באורך מחרוזת
ה-const_cast משמש לשינוי או מניפולציה של התנהגות ה-const של מצביע המקור. זה אומר שאנחנו יכולים לבצע את ה-const בשתי דרכים: הגדרת מצביע const למצביע שאינו const או מחיקה או הסרה של ה-const ממצביע const.
תחביר מסוג Const Cast
const_cast exp;
תוכנית להשתמש ב-Const Cast ב-C++
בוא נכתוב תוכנית להטלת מצביע מקור למצביע שאינו מוצק באמצעות ה-const_cast ב-C++.
#include using namespace std; // define a function int disp(int *pt) { return (*pt * 10); } int main () { // declare a const variable const int num = 50; const int *pt = # // get the address of num // use const_cast to chnage the constness of the source pointer int *ptr = const_cast (pt); cout << ' The value of ptr cast: ' << disp(ptr); return 0; }
תְפוּקָה:
The value of ptr cast: 500