logo

اكتب الصب في C++

سيناقش هذا القسم نوع المتغيرات في لغة البرمجة C++. يشير نوع النوع إلى تحويل نوع بيانات إلى نوع آخر في البرنامج. يمكن إجراء عملية الكتابة بطريقتين: تلقائيًا بواسطة المترجم ويدويًا بواسطة المبرمج أو المستخدم. يُعرف Type Casting أيضًا باسم تحويل النوع.

اكتب الصب في C++

على سبيل المثال، لنفترض أن البيانات المقدمة هي نوع صحيح، ونريد تحويلها إلى نوع عائم. لذلك، نحتاج إلى إرسال بيانات int يدويًا إلى النوع العائم، وهذا النوع من الإرسال يسمى 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 

ينقسم نوع Casting إلى نوعين: التحويل الضمني أو صب النوع الضمني وتحويل النوع الصريح أو صب النوع الصريح.

صب النوع الضمني أو تحويل النوع الضمني

  • ومن المعروف باسم صب النوع التلقائي.
  • يتم التحويل تلقائيًا من نوع بيانات إلى آخر دون أي تدخل خارجي مثل المبرمج أو المستخدم. وهذا يعني أن المترجم يقوم تلقائيًا بتحويل نوع بيانات إلى آخر.
  • تتم ترقية جميع أنواع البيانات تلقائيًا إلى النوع الأكبر دون فقدان أي معلومات.
  • ولا يمكن تطبيقه إلا في البرنامج إذا كان كلا المتغيرين متوافقين مع بعضهما البعض.
 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; } 

انتاج:

Mysql إظهار كافة المستخدمين
 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.

وبالمثل، في التعبير الثالث، نضيف المتغير الصحيح num وهو 20، ومتغير الحرف ch هو 65، ثم نسند النتيجة إلى المتغير العائم val. وبالتالي يتم تحويل نتيجة التعبير تلقائيًا إلى النوع العائم بواسطة المترجم.

صب النوع الصريح أو تحويل النوع الصريح

  • يُعرف أيضًا باسم صب النوع اليدوي في البرنامج.
  • يتم تحويلها يدويًا بواسطة المبرمج أو المستخدم للتغيير من نوع بيانات إلى نوع آخر في البرنامج. وهذا يعني أنه يمكن للمستخدم بسهولة إرسال بيانات إلى أخرى وفقًا لمتطلبات البرنامج.
  • لا يتطلب التحقق من توافق المتغيرات.
  • في هذا الاختيار، يمكننا ترقية أو تقليل نوع البيانات من متغير إلى آخر في البرنامج.
  • ويستخدم عامل cast () لتغيير نوع المتغير.

بناء جملة صب النوع الصريح

 (type) expression; 

يكتب: وهو يمثل البيانات المحددة من قبل المستخدم والتي تقوم بتحويل التعبير المحدد.

تعبير: وهو يمثل القيمة الثابتة أو المتغير أو التعبير الذي يتم تحويل نوع البيانات الخاص به.

على سبيل المثال، لدينا رقم تأشير عائم هو 4.534، ولتحويل قيمة عددية، تكون العبارة على النحو التالي:

 int num; num = (int) 4.534; // cast into int data type cout << num; 

عند تنفيذ العبارات المذكورة أعلاه، سيتم تحويل قيمة الفاصلة العائمة إلى نوع بيانات عدد صحيح باستخدام عامل التشغيل cast (). ويتم تعيين القيمة العائمة إلى عدد صحيح يقتطع الجزء العشري ويعرض 4 فقط كقيمة عددية.

برنامج لتوضيح استخدام النوع الصريح في لغة C++

لنقم بإنشاء برنامج بسيط لتحويل متغير نوع إلى نوع آخر باستخدام صب النوع الصريح في لغة البرمجة 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.

في التعبير الثاني، نعلن عن متغير من النوع العائم res الذي يخزن نتائج a وb دون فقدان أي بيانات باستخدام عامل cast في طريقة cast type الصريحة.

برنامج لتحويل البيانات المزدوجة إلى نوع int وfloat باستخدام عامل الإرسال

لنفكر في مثال للحصول على مساحة المستطيل عن طريق إرسال بيانات مزدوجة إلى نوع float وint في برمجة C++.

 #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 

بعض الأنواع المختلفة من نوع الصب

في النوع cast، يوجد عامل تحويل يفرض تحويل نوع بيانات واحد إلى نوع بيانات آخر وفقًا لاحتياجات البرنامج. يحتوي C++ على أربعة أنواع مختلفة من عامل الإرسال:

  1. Static_cast
  2. Dynamic_cast
  3. const_cast
  4. reinterpret_cast

طاقم ثابت:

إن static_cast عبارة عن قالب بسيط في وقت الترجمة يقوم بتحويل أو إرسال نوع بيانات إلى آخر. وهذا يعني أنه لا يتحقق من نوع البيانات في وقت التشغيل ما إذا كان الإرسال الذي تم إجراؤه صالحًا أم لا. وبالتالي يتحمل المبرمج أو المستخدم مسؤولية التأكد من أن التحويل آمن وصالح.

إن static_cast قادر بدرجة كافية على إجراء جميع التحويلات التي يتم تنفيذها بواسطة طاقم التمثيل الضمني. ويقوم أيضًا بإجراء التحويلات بين مؤشرات الفئات المرتبطة ببعضها البعض (upcast -> من مشتق إلى فئة أساسية أو downcast -> من فئة أساسية إلى فئة مشتقة).

بناء جملة طاقم العمل الثابت

 static_cast (expression); 

برنامج لتوضيح استخدام Static Cast

لنقم بإنشاء مثال بسيط لاستخدام القالب الثابت لنوع النوع في برمجة 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 عامل تشغيل في وقت التشغيل يستخدم لإجراء تحويل متغير نوع إلى آخر فقط على مؤشرات ومراجع الفئة. وهذا يعني أنه يتحقق من الصب الصحيح للمتغيرات في وقت التشغيل، وإذا فشل الصب، فإنه يُرجع قيمة NULL. يعتمد الصب الديناميكي على آلية RTTI (تحديد نوع وقت التشغيل).

برنامج لتوضيح استخدام Dynamic Cast في لغة C++

لنقم بإنشاء برنامج بسيط لإجراء البث الديناميكي في لغة البرمجة 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. 

إعادة تفسير نوع المصبوب

يتم استخدام صب النوع 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 للمؤشر المصدر. هذا يعني أنه يمكننا إجراء 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