الوحدة الثانية عشر:::::من الدروس

محتويات الوحدة
 
دوال التحويل
التحويل من نوع أساسي إلى نوع معرف
التحويل من نوع معرف إلى نوع أساسي
التحويل من نوع معرف إلى نوع آخر معرف.
 
 
 
 
 
 
 
وحدات اخرى
 
  الوحدة الأولى
  الوحدة الثانية
  الوحدة الثالثة
  الوحدة الرابعة
  الوحدة الخامسة
  الوحدة السادسة
  الوحدة السابعة
  الوحدة الثامنة
  الوحدة التاسعة
  الوحدة العاشرة
  الوحدة الحادية عشر
  الوحدة الثانية عشر
  الوحدة الثالثة عشر
  الوحدة الرابعة عشر
 

 مواقع أخرى

 

الأخبار

 
  الجزيرة
  العربية

  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" ;

}

}   ;

main ( )

{

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  

مثال : ـ هل يمكن تنفيذ البرنامج التالي :

class            myclass

{

};

main ( )

{

myclass  c1;

float   x = 12.5;

* - x  =   c1 ;

 

لا يمكن تنفيذ البرنامج أعلاه لأن العبارة ( * ) خاطئة لأنها غير معرفة ولا يمكن التحويل بين نوع معرف ( كائن ) ونوع أساسي    ( عدد حقيقي )

ولجعل العبارة السابقة صحيحة نقوم بتحميل النوع الأساسي(float  )تحميلا ً زائداً حتى يتم تحويل النوع المعرف ( c1 ) إلى النوع الأساسي = x

مثال : برنامج يقوم بالتحويل من نوع معرّف إلى نوع أساسي :

#include<iostream.h>

#include<conio.h>

class     L meters

{

private :

float   meter;

public :

      Lmeters ( )

{

meter  = 0.0  ;

}

void display ( )

{

cout<< meter << "\n" ;

}

operator float ()

{

return meter ;

}

}    ;

main ( )

{

L meters m1 ;

m1.display ( ) ;

float  x ;

cout << "Enter x \ n " ;

cin >> x ;

x = float ( m1 ) ;  // x = m1 ;

cout<< x << " \n " ;

getch( ) ;

}

باستخدام العبارة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