بالنسبة للـOOP البرمجة الغرضية التوجه
فانتى لم تحددى عن اى لغة برمج سوف تتكلمى
على العموم الـتحميل الزائد فى البرمجة غرضية التوجع يعنى
انه يمكنك تعريف أكثر من Function ,Sub بنفس الأسم ويزجد أختلاف في عدد البرمترات أو في نوع البرميتار(Data Type) مثال
كود:
1
sub Sum(x as integer,y as integer)
end sub
2
sub Sum(x as integer)
end sub
3
sub Sum (x as integer ,y as string)
end sub
عند الأستدعاء
ٍSum(5)
هذا ينادي 2
Sum (5,6)
هذا ينادي 1
Sum (5,"6")
هذا ينادي 3
لمزيد من الايضاح الرجاء تحميل الكتاب التالى
مكتبة الكتب
او كتاب البرمجة الكائنية تحميل الكتاب
لا تنسونا من دعوا صالحة
التعديل الأخير تم بواسطة : demon بتاريخ 16-07-2005 الساعة 12:49.
السبب: خطاء فى المشاركة السابقة الرجاء التعديل
اليك عزيزتى مايا
التحميل الزائد للمعاملات يعد من قمة الرفاهيات التى تعطيها لك OOP.
ما هى فكرة التحميل الزائد للمعاملات ؟
حسنا, الكل يعلم هنا ان المعملات الاساسية مثل + و - و * و ..............
كل هذه العلامات لها دلالات عند العمل على المتغيرات الرقمية.
مثلا
int x,y,z
y = x + z
فى هذا السطر تم استخدام معاملين هما + و =
فى مثل هذه الاحوال تكون قيمة y هى القيمة التى تعادل نتيجة جمع x , y
عند التعامل مع متغيرات رقمية, نستعمل هذه المعاملات بدلالاتها البدائية التى يعرفها كل منا.
لكن ماذا لو كان هناك كائن من بين هذه المعملات, كيف سيتم التعامل معه.
المعاملات و الكائنات؟
تنقسم المعاملات الى قسمين رئيسيين. القسم الاول المعاملات التى تطبق على متغيرين فقط
مثل y+=r. هذا السطر من منا لا يعؤف معناه y = y + r .
حسنا لنفرض اننا نريد ان نطور class حتى تغلف لنا مفهوم ال Matrix.
من البديهى لاى مستخدم لهذه الكلاس ان يكتب الكود التالى.
كود:
Matrix x,y;
// after the intialization of both variables
x+=y;
ماذا عن هذا المعامل += و كيف يمكن لنا ان نضيف تعريفه الى الكلاس
كود:
const Matrix& operator+=(const Matrix& m)
{
//here implement the multiplication operation
// *this = *this * m
//at the end return the same object
return *this;
}
اذا اضفنا هذه الدالة الى الكلاس Matrix نكون قد عرفنا هذا المعامل
اما عن الاعادة الى تعيدها هذه الدالة فهى للكمال فقط, و حتى يعمل مثل هذا الس
ماهو النوع الثانى للمعاملات؟
مثال لهذا النوع نفس الكلاس Matrix لنقل اننا نريد تعريف هذا السطر
كود:
z = x + y
z = x * y
فى مثل هذه الحالات نحتاج الى دالة خارجية غير تابعة للكلاس Matrix
و هى التى تقوم بالعملية, و اذا استدعى الامر من الممكن ان تكون
كود:
friend
const Matrix& operator + (const Matrix& m1 , const Matrix& m2 )
{
// the matrix that contians the result
Matrix m;
///////////////////////////////////////////////////////
/////// here set m to be eqivalent to m1+m2
///////////////////////////////////////////////////////
return m;
}
هذه الدالة الخاريجية سوف تضيف المعامل +
و يمكنك لن تضيف المعاملات التى تريدها بالمدخلات الى تريدها
و ذلك على حسب متطلبات الكائنات التى تتعامل معها. و مدى ارتباطها ببعضها البعض.
وكمان للمزيد
هذا العنوان فيه موضوع بعنوان
OOP البرمجة كائنية المنحى, نظرة تحليلية مفصلة الفريق العربي
اكيد حاتلاقى حاجات مفيده كتيره فى الموضوع ده.
المصدر الفريق العربي
واهلا وسهلا بك وبمشاركاتك.
----
الاخ العزيز عابر سبيل
اهلا بك فى دارك وشكراً على مرورك و مشاركاتك
التعديل الأخير تم بواسطة : demon بتاريخ 18-07-2005 الساعة 17:39.
ديمون
والله ما عارفه اقول ليك شنو ؟؟
الكلام ده كان عامل لي وجع قلب , وفتشت كتيييير في النت ما لقيت الحاجه الانا عايزه.
والله شكرا كتيييييييييييييييييييير شديد.
اوكي من البداية خالص
حا نتكلم عن الـOverloading operators في الC++
التحميل الزائد للعلامات من المميزات التي تضيفها الـOOP الي لغة السي بلس فهي لم تكن موجودة في لغة سي حيث انها لم تكن معتمدة علي البرمجة كائنية التوجه.
والان دعنا نتعرف علي الـ ـOverloading operators في الC++
من الطبيعي عندما نقوم بالتعامل مع العلامات الرياضية فان كل المعاملات التي ندخلها في العملية الرياضية تكون معاملات رياضية او ارقام
بمعني انه لايجوز لنا سابقا استعمال معامل من نوع حرفي في عملية رياضية باستخدام معامل رياضى.
مثال:
المثال الاول علي استعمال الـOverloading operators
افرضي انه عندك متجهa ومتجهb وتريدي مجموع المتجهين
حيث ان المتجه a(3,1) و b(1,2)
وناتج جمع المتجهين يساوي (3+1,1+2) = (4,3)
نجد ان هذا الجمع غير جائز دون استخدام التحميل الذائد
والمثال علي ذالك
كود:
// vectors: overloading operators example
#include <iostream.h>
class CVector {
public:
int x,y;
CVector () {};
CVector (int,int);
CVector operator + (CVector);
};
CVector::CVector (int a, int b) {
x = a;
y = b;
}
CVector CVector::operator+ (CVector param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return (temp);
}
int main () {
CVector a (3,1);
CVector b (1,2);
CVector c;
c = a + b;
cout << c.x << "," << c.y;
return 0;
}
OutPut:::: 4,3