السلام عليكم ورحمة الله وبركاته
سأقدم اليوم بإذن الله درس بسيط يتعلق بالأصناف (
Classes ) في البرمجة الـ
OOP الآن..
عندما تقوم بإنشاء صنف جديد (نوع جديد) من أنواع البيانات عادة ما لا يمكنك استخدام الـ
Operators بشكل عادي خلالها
لذلك سأقوم بشرح كيفية اضافة العمليات الحسابية التي تريدها < ما يعرف بالـ
Overloaded Operator كـ
++ و
+= و
+ وغيرها من العمليات الحسابية أو المنطقية
وأتمنى أن تصل الفائدة المرجوة منه
نبدأ الدرس
لنفرض أن لدينا صنفاً ما ..وليكن مثلا اسمه
Counter .. عداد !
- الكود:
-
[LEFT][COLOR="Red"]class Counter{
int X;
public:
Counter(){X = 0;} // Constructor
};[/COLOR][/LEFT]
طبعا الصنف هنا ..آلة صماء .. قيمتها الابتدائية
= 0 وإن عملنا منها (
object) أو نسخة..وليكن مثلا اسمها
ME فإنه سيكون للنسخة متغير قيمته
0 ولن تتغير القيمة
- الكود:
-
[LEFT][COLOR="Red"]int main()
{
Counter ME; // ME has a Constructor with 0
return 0;
}[/COLOR][/LEFT]
جيد..حسناً .. بإمكاننا الآن إنشاء دالة لزيادة العداد بمقدار
1 في كل مرة يتم استدعاؤه
- الكود:
-
[LEFT][COLOR="Red"]class Counter{
int X;
public:
Counter(){X = 0;} // Constructor
void Inc(){X++;}
};[/COLOR][/LEFT]
واستدعاءها يكون على الشكل التالي في الدالة main
- الكود:
-
[LEFT][COLOR="Red"]ME.Inc(); // increment ME.X one[/COLOR][/LEFT]
جميل..
الآن سيبدأ العمل مع الدرس..
وهو كيف نجعل الـ
ME يمكن أن يستقبل عمليات حسابية أو منطقية من دون
أن يتم ذلك من خلال دالة
سنستخدم الكلمة المحجوزة (
operator) .. ونقوم بإنشاء دالة عملية حسابية هي
++ طبعا بعد حذف الدالة
Inc من الصنف..لأننا لم نعد بحاجة لها
ليكون لدينا التالي :
- الكود:
-
[LEFT][COLOR="Red"]class Counter{
int X;
public:
Counter(){X = 0;} // Constructor
void operator++(){X++;} // To use ++ Operator in Class
};[/COLOR][/LEFT]
جميل..الآن أصبح لدى صنفنا القدرة على التعامل مع العملية الحسابية الأحادية (
++)
ويكون عملها باحدى الطريقتين
- الكود:
-
[COLOR="Red"][LEFT]int main()
{
Counter ME; // ME has a Constructor with 0
ME++;
//or
++ME;
return 0;
}[/LEFT][/COLOR]
جميل..أليس كذلك :)
أعتقد أصبح واضحاً كيف نقوم بنفس الخطوة على الـ (
--)
حسنا..الآن سنأخذ بعداً آخر ..أبعد :)
سنقوم بجعل الـ
Object ..قادراً على التعامل مع العملية الحسابية (
+)
لابد أن تعلم أنه يجب أن تكون القيمة المستقبلة..والقيمة المعادة..نفس النوع
- الكود:
-
[LEFT][COLOR="Red"]class Counter{
int X;
public:
Counter(){X = 0;} // Constructor
void operator++(){X++;} // To use ++ Operator in Class
[COLOR="Lime"]Counter [/COLOR]operator+([COLOR="Lime"]Counter [/COLOR]R){ R.X = X + R.X ; return R;}
};[/COLOR][/LEFT]
الآن نجرب نجري عملية حسابية على ثلاثة (
Objects) :
- الكود:
-
[COLOR="Red"][LEFT]int main()
{
Counter ME,FE,DE; // ME has a Constructor with 0
FE++;
DE++;
ME = FE + DE;
return 0;
}[/LEFT][/COLOR]
الآن قيمة الـ
ME تساوي مجموع القيمتين وهو الرقم
2 في المثال السابق
إلى هنا انتهى الدرس..
أنوه إلى أنه هناك أمور
لم أتطرق لها في الشرح ..
وأن الطريقة أيضا يمكنك استخدامها في أمور عدة
وأن العملية تتم على متغير ..ماذا لو كان لدينا
أكثر من متغير في الكلاس
بإمكانك استخدام الطريقة لجمع سلسلتين نصيتين
(مصفوفة أحرف) من صنعك..
على سبيل المثال .
.
.
[COLOR="Red"]في الختام
الدرس قديمًا قدمته , فنسخته لعله يفيد من يريد