الوحدة الخامسة ::: من الدروس

محتويات الوحدة
 
مؤشر الكائن
مثال مؤشر الكائن
ملاحظات إضافية
مثال متجه الكائنات
تهيئة عنصر مصفوفة
استخدام delete & new
 
 
 
 
 
 
 
وحدات اخرى
 
  الوحدة الأولى
  الوحدة الثانية
  الوحدة الثالثة
  الوحدة الرابعة
  الوحدة الخامسة
  الوحدة السادسة
  الوحدة السابعة
  الوحدة الثامنة
  الوحدة التاسعة
  الوحدة العاشرة
  الوحدة الحادية عشر
  الوحدة الثـانية عشر
  الوحدة الثالثة عشر
  الوحدة الرابعة عشر
 

 مواقع أخرى

 

الأخبار

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

  BBC عربي

  CNN عربي

 

الصحف

 

  الحياة
  الوطن
  القدس العربي
  الشرق الأوسط

 

 الجامعات

 
  جامعة أم القرى
  جامعة الملك فهد

  جامعة الملك سعود

  جامعة الملك عبد العزيز  

 

الرياضة

 
  شبكة الزعيم
  منتديات مدريدي

 

 

 
 


الوحدة الخامسة

   
مؤشر الكائن  Pointer of Object 

  في الأجزاء السابقة تم الوصول إلى أعضـاء الكائن باستخدام الأداة (.) وهي طريقة صحيحة أيضاً تسمح لغة C++ باستخدام أداة أخرى للوصول إلى أعضاء الكائن وهي أداة السهم (->) تماماً كما هو الحال في التراكيب ويتم ذلك عندما يكون الكائن عبارة عن مؤشر.

 

 
 

 أعلى

 

 

   
 مثال:-

#include<iostream.h>

#include<conio.h>

class myclass

{

int a;

public:

myclass(int);

int get(  );

};

myclass::myclass(int x)

{

a=x;

}

int myclass::get(  )

{

return a;

}

main(  )

{

myclass ob(120); // define object

myclass *p;  //define pointer of object

p=&ob; // transfer address of ob to p

cout<<"value from using object :"<<ob.get(  )<<"\n";

cout<<"value from using pointer of object :"<<p->get(  )<<"\n";

getch(  );

}

ملاحظات:-

 

1.myclass*p استخدمنا الجملة  لبناء مؤشر إلى الكائن.

2. بناء مؤشر الكائن بحد ذاته لايبني الكائن وإنما فقط يؤشر إليه.

3. p=&obللحصول على عموان موقع الكائن نستخدم العبارة.

 

 

 
 

 أعلى

 

 

   
 ملاحظات إضافية

ملاحظة:-

عند الحديث عن مؤشر الكائن  فانه يظهر مفهوم جديد وهو المؤشر الحسابي ونقصد به هو أن مؤشر الكائن يمكن أن يخضع لبعض العمليات الحسابية وهي :

1.     (++) أي زيادة المؤشر Increment .

وتعني أن المؤشر يشير إلى الكائن اللاحق

2.     (--) أي إنقاص المؤشر Decrement .

 

ملاحظة مهمة:-

عند الحديث عن مؤشر الكائن  فانه يظهر مفهوم جديد وهو المؤشر الحسابي ونقصد به هو أن مؤشر الكائن يمكن أن يخضع لبعض العمليات الحسابية  وهي :

1.     (++) أي زيادة المؤشر Increment

وتعني أن المؤشر يشير إلى الكائن اللاحق

2.     (--) أي إنقاص المؤشر Decrement

      وتعني أن المؤشر يشير إلى الكائن السابق

 

 
 

 أعلى

 

 

   
 مثال متجه الكائنات:-  

 

#include<iostream.h>

#include<conio.h>

class samp

{

int a,b;

public:

samp(int n,int m)

{

a=n;

b=m;

}

int get_a(  )

{

return a;

}

int get_b(  )

{

return b;

}

};

main(  )

{

samp ob[4]={samp(1,2),samp(3,4),samp(5,6),samp(7,8)}; // define object

int i;

samp *p;   

p=&ob[i];

 

for(i=0;i<4;i++)

{

cout<<p->get_a()<<"\t"<<p->get_b()<<"\n";

p++;

}

getch(  );

}

كما هو ملاحظ في البرنامج فان كل عملية زيادة في p++  تشير إلى الكائن التالي في متجه الكائنات

وبما أن الحديث في هذا البرنامج يدور حول متجه الكائنات (objects array)

فلابد من الأخذ بعين الاعتبار للملاحظات التالية :-

1 .C++إن الكائن هو بحد ذاته متغير كأي متغير آخر وبناءاً عليه فان تسمح باستخدام متجه الكائنات

2.C++ أسلوب إعلان متجه  الكائنات مشابه تماماً لأسلوب إعلان متجه المتغيرات في

 

 
 

 أعلى

 

 

   
 تهيئة عنصر مصفوفة:-

ملاحظة:-

إذا كان الصنف يتعامل مع مصفوفة كائنات وفي نفس الوقت مع دوال البناء الخاصة بها فانه يمكن تهيئة عنصر مصفوفة الكائنات كما في المثال التالي :-

 

#include<iostream.h>

#include<conio.h>

class samp

{

int a;

public:

samp(int n)

{

a=n;

}

int get_a(  )

{

return a;

}

};

main(  )

{

samp ob[4]={-1,-2,-3,-4};

int i;

for(i=0;i<4;i++)

cout<<ob[i].get_a(  )<<"\t";

cout<<"\n";

getch(  );

}

 

  -1     -2      -3      -4          هذا البرنامج يظهر على الشاشة القيم    

samp( int n)    بواسطة دالة البناء    obونلاحظ أن القيم ترسل إلى الكائن    

 

ملاحظة:-

هي طريقة مختصرة لتهيئة متجه الكائنات والذي يمكن ان يكتب بطريقة موسعه حسب الجملة التالية

 samp ob[4]={-1,-2,-3,-4} الجملة       

 

 

 
 

 أعلى

 

 

   
استخدام new    &   delete :-  

    لإلغاء  delete  لحجز الذاكرة الديناميكية  والمؤشر   new  نستخدم المؤشر  C++في لغة  

الذاكرة المحجوزة ( تنظيف الذاكرة )

والصيغة العامة هي:-

p_var =new type;

delete    p_var;   

تحدد نوع الكائن الذي سنقوم بحجز ذاكرة له أما type حيث

فهي مؤشر هذا النوع.

ملاحظة

  لحجز  new   يمكن استخدام new  لحجز ذاكرة ديناميكية لكائن منفرد  كما يمكن استخدام  newيمكن استخدام

ذاكرة لمتجه كائنات حسب  الصيغة العامة التالية:-

p_var =new type[size];

  delete  تشير إلى أول عنصر في متجه الكائنات , كما يستخدم p-varوفي هذه الحالة

لحذف متجه كائنات من الذاكرة حسب الصيغة العامة التالية:-

delete[]     p_var;   

-:مثال

 مع متجه كائنات:  new  &  deleteاستخدام 

#include<iostream.h>

#include<conio.h>

class samp

{

int i,j;

public:

void set_ij(int a,int b)

{

i=a;

j=b;

}

int get_product(  )

{

return i*j;

}

};

main(  )

{

samp *p;

int i;

p=new samp[10];

for(i=0;i<10;i++)

{

p->set_ij(i,i);

cout<<p->get_product(  )<<"\n";

}

delete[  ] p;

getch(  );

}

 

 
 

<< الوحدة السابقة

 أعلى

الوحدة التالية >>

 

                                                             

 
   
 

جميع الحقوق محفوظة © 2006