- المؤشرات إلى الأصناف

المؤشرات إلى الأصناف

تسمح لنا لغة ++C بتعريف متحولات من نمط مؤشر إلى صنف، ونحقق ذلك باعتبار أن أي صنف يصبح بعد التصريح عنه نمطا نظاميا نستطيع استخدامه كما نستخدم أنماط اللغة الأساسية في تعريف أنماط المؤشرات. مثال:
كود:
CRectangle *prect;
نصرح هنا عن مؤشر إلى كائن من النمط CRectangle.
ونستطيع الوصول إلى أي عنصر من عناصر الكائن المشار إليه بمؤشر ما عن طريق العامل (.) إليك المثال التالي الذي نبين فيه بعض استخدامات المؤشرات مع الأصناف:
كود:
// pointer to classes example #include <iostream.h> class CRectangle { int width, height; public: void set_values (int, int); int area (void) {return (width*height);} }; void CRectangle::set_values (int a, int b) { width=a; height=b; } int main () { CRectangle a, *b, *c; CRectangle *d=new CRectangle[2]; b=new CRectangle; c=&a; a.set_values (1,2); b->set_values (3,4); d->set_values (5,6); d[1].set_values (7,8); cout<<"a area:"<<a.area()<<endl; cout<<"*b area:"<<b->area()<<endl; cout<<"*c area:"<<c->area()<<endl; cout<<"d[0] area:"<<d[0].area()<<endl; cout<<"d[1] area:"<<d[1].area()<<endl; return 0; } Output: a area:2 *b area:12 *c area:2 d[0]area:30 d[1]area:56
نقدم فيما يلي شرحاً مختصراً عن بعض العوامل ([],<-,.,&,*) وتعابير الأصناف والمؤشرات مع معانيها والتي نجدها في المثال السابق:

نقرأ التعبير X* بالشكل: الكائن المشار إليه بالمؤشر X.

نقرأ التعبير X& بالشكل: عنوان X.

نقرأ التعبير X.Y بالشكل: العنصر Y من الكائن X.

نقرأ التعبير كود:
(*X).Y
بالشكل: العنصر Y من الكائن المشار إليه بالمؤشر X.

نقرأ التعبير X->Y بالشكل: العنصر Y من الكائن المشار إليه بالمؤشر X (مكافىء للتعبير السابق تماماً).

نقرأ التعبير [0]X بالشكل: الكائن الأول المشار إليه بالمؤشر X.

نقرأ التعبير [1]X بالشكل: الكائن الثاني المشار إليه بالمؤشر X.

نقرأ التعبير كود:
X[N]
بالشكل: الكائن (1+N) المشار إليه بالمؤشر X.

يجب عليك فهم هذه التعابير تماماً قبل الانتقال إلى الفقرات القادمة، فإذا واجهت صعوبة في فهمهم فعليك معاودة قراءة هذا الفصل من البداية.

ملاحظة: الفرق بين الصنف class والبنية struct:
يكون مستوى الوصول الافتراضي للعناصر في الصنف خاصاً private، في حين يكون مستوى الوصول الافتراضي للعناصر في البنية عاماً public، وهذا هو الفرق الوحيد بين البنية و الصنف في لغة ++C. ومع ذلك نستخدم البنية عادة لتشكيل كتل من المعطيات فقط (للتوافق مع البنية المأخوذة من اللغة C الأم)، ونستخدم الأصناف لتشكيل كائنات لها صفات (حقول معطيات) وسلوكيات (مناهج).