مواقع أخرى
الأخبار
BBC عربي
CNN عربي
الصحف
الجامعات
جامعة الملك سعود
جامعة الملك عبد العزيز
الرياضة
دوال التحويل
Conversion Functions
تعريف دالة التحويل :
هي عبارة عن دالة تحمل بشكل زائد ووظيفتها التحويل من نوع معين إلى نوع آخر .
حيث توجد لدينا نوعان من البيانات :
1. الأنواع الأساسية مثل :
int , float , char , double
2. الأنواع المعرفة : وهي الكائنات باعتبار أنها معرفة من قبل المستخدم حيث توجد ثلاثة أنواع من التحويلات .
1. التحويل من نوع أساسي إلى نوع معرف من قبل المستخدم .
2. التحويل من نوع معرف من قبل المستخدم إلى نوع أساسي .
3. التحويل من نوع معرف من قبل المستخدم إلى نوع آخر معرف من قبل المستخدم .
أعلى
من نوع أساسي إلى نوع معرف
مثلاً : إذا كان لدينا متغير صحيح وليكن x وكائن m من صنف معين إذا كتبنا العبارة التالية :
m = x ;
فهي تعني تحويل نوع أساسي وهو x إلى نوع معرف من قبل المستخدم وهو m .
مثال : هل يمكن تنفيذ البرنامج التالي :
class myclass
{
} ;
main ( )
myclass c1 ;
int x = 10 ;
*-c1 = x ;
}
لا يمكن تنفيذ البرنامج أعلاه لأن العبارة ( * ) خاطئة لأنها غير معرفة ولا يمكن التحويل بين عدد صحيح وكائن ولجعل العبارة السابقة صحيحة يجب تعريف الطريقة التي سيستخدمها المترجم لإجراء هذه العملية .
يمكن إنجاز هذه العملية باستخدام دالة بناء تستقبل وسيطة واحدة .
مثال : برنامج يقوم بالتحويل من نوع أساسي إلى نوع معّرف
#include<iostream.h>
#include<conio.h>
class Lmeters
private :
int meter;
public :
Lmeters ( )
meter = 0 ;
** Lmeters ( )
meter = n ;
void display ( )
cout<< meter << "\n" ;
L meters m1 ;
m1.display ( 1;
int x ;
cout << "Enter x \ n " ;
cin >> x ;
m1 = x ;
m1.display () ;
getch( ) ;
لاحظ العملية : العبارة m1 = x
أسندنا نوع أساسي ( int ) إلى نوع معرف (كائن )
في هذا المثال ينظر المترجم إلى الصنف فإذا وجد دالة بناء تستدعي وسيطة واحدة وهي الدالة المشار إليها بـ ** تعتبر التعليمة صحيحة
حيث تعتبر العبارة ( m1= x ) هي استدعاء دالة بناء من وسيطة واحدة أي بمعنى آخر أن :
m1 = x ≡ m1 ( x )
إذا لم يجد المترجم دالة بناء بوسيطة واحدة تعتبر العبارة
m1= x خاطئة وتظهر رسالة خطأ .
التحويل من نوع معرف إلى نوع أساسي
مثلاً إذا كان لدينا متغير حقيقي وليكن y وكائن n من صنف معين إذا كتبنا العبارة التالية y = n .
فهي تعني تحويل نوع معرف من قبل المستخدم n إلى نوع أساسي وهو y
مثال : ـ هل يمكن تنفيذ البرنامج التالي :
};
myclass c1;
float x = 12.5;
* - x = c1 ;
لا يمكن تنفيذ البرنامج أعلاه لأن العبارة ( * ) خاطئة لأنها غير معرفة ولا يمكن التحويل بين نوع معرف ( كائن ) ونوع أساسي ( عدد حقيقي )
ولجعل العبارة السابقة صحيحة نقوم بتحميل النوع الأساسي(float )تحميلا ً زائداً حتى يتم تحويل النوع المعرف ( c1 ) إلى النوع الأساسي = x
مثال : برنامج يقوم بالتحويل من نوع معرّف إلى نوع أساسي :
class L meters
float meter;
meter = 0.0 ;
operator float ()
return meter ;
m1.display ( ) ;
float x ;
x = float ( m1 ) ; // x = m1 ;
cout<< x << " \n " ;
باستخدام العبارةx = float ( m1) تكون قد حولنا m1 من النوع lmeters إلى النوع flout عن طريق دالة التحميل الزائد operator float –( ) .
التحويل من نوع معرف إلى نوع آخر معرف
من قبل المستخدم مثلاً إذا كان لدينا صنفان الصنف الأول class1 و به الكائن c1 والصنف الثاني class2 وبه الكائن c2 .
إذا كتبنا العبارة ( *) ; c2 = c 2
فهي تعني تحويل c1 إلى c2 وكلاهما كائنين معرفان من قبل المستخدم ولكن من صنفين مختلفين . فعنده العبارة تعتبر خاطئة .
ملاحظة مهمة :
إذا كان الكائنين c1 و c2 من نفس الصنف فالعبارة c1 = c2 تعتبر صحيحة وتعني نسخ محتويات الكائن c1 في الكائن c2 .
ولجعل العبارة ( * ) صحيحة
c1 = c2
كائن من صنف المصدر كائن من صنف المستودع
نستخدم إحدى الطرق التالية :
1. وجود دالة بناء ناسخة في الصنف المستودع تستقبل من صنف المصدر .
2. تحميل الصنف المحول إليه ( صنف المستودع ) تحميلاً زائداً وتكون دالة التحميل الزائد موجودة في ( صنف المصدر ) .
الوحدة التالية >>
جميع الحقوق محفوظة © 2006