اسرة منتدى ++C اهلا وسهلا بكم
عندى سؤال طرح على ولم اجد له جوابا
السؤال انه :
فى لغة البرمجة الكائنية ماذا نعنى بالتحميل الزائد للعلامات
IN OOP ,,over load operation
>= , =<
ارجو منكم مساعدتى فى الجواب على هاذا التسائل
وشكراً لكم،
اسرة منتدى ++C اهلا وسهلا بكم
عندى سؤال طرح على ولم اجد له جوابا
السؤال انه :
فى لغة البرمجة الكائنية ماذا نعنى بالتحميل الزائد للعلامات
IN OOP ,,over load operation
>= , =<
ارجو منكم مساعدتى فى الجواب على هاذا التسائل
وشكراً لكم،
100% Muslim Sunni
█║│█│║▌║││█║
█║│█│║▌║││█║
3619003249802010
Mahjooob Ibrahim
█║│█│║▌║││█║
█║│█│║▌║││█║
3619003249802010
التحميل الزائد للمعاملات يعد من قمة الرفاهيات التى تعطيها لك 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 نكون قد عرفنا هذا المعامل
اما عن الاعادة الى تعيدها هذه الدالة فهى للكمال فقط, و حتى يعمل مثل هذا السطر
z = (x+=y)
ماهو النوع الثانى للمعاملات؟
مثال لهذا النوع نفس الكلاس 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;
}هذه الدالة الخاريجية سوف تضيف المعامل +
و يمكنك لن تضيف المعاملات التى تريدها بالمدخلات الى تريدها
و ذلك على حسب متطلبات الكائنات التى تتعامل معها. و مدى ارتباطها ببعضها البعض.
استاذ justnow
اشكرك على اجابتك السريعة ومعلوماتك المفيدة
الف شكر استاذى
100% Muslim Sunni
█║│█│║▌║││█║
█║│█│║▌║││█║
3619003249802010
Mahjooob Ibrahim
█║│█│║▌║││█║
█║│█│║▌║││█║
3619003249802010
خد الكود دة سهل وبسيط يوضح العملية اكتر
#include <iostream>
#include <conio>
#include <stdio>
#include <stdlib>
class STRING
{
private:
enum { s=100 };
char x;
public:
STRING()
{
x==NULL;
}
STRING(char X)
{
strcpy(x,X);
}
void GetData()
{
cout<<"enter the data:\t"; cin>>x;
}
void print()
{
cout<<"the value of object is:\t"<<x;
cout<<"\n";
}
bool operator >(STRING &a2) const
{
if(strcmp(x,a2.x)<0)
return true;
else
return false;
}
bool operator ==(STRING &a2) const
{
if(strcmp(x,a2.x)==0)
return true;
else
return false;
}
STRING &operator=(STRING &a2)
{
strcpy(x,a2.x);
return *this;
}
STRING operator+(STRING &a2) const
{
STRING tmp;
if( strlen(a2.x)+strlen(x)<s )
{
strcpy(tmp.x,x);
strcat(tmp.x,a2.x);
}
else { cout<<"ERROR \n"; exit(0); }
return tmp;
}
STRING &operator+=(STRING &a2)
{
strcat(x,a2.x);
return *this;
}
};
void main()
{
STRING o1;
STRING o3,o2;
o1.GetData();
o2.GetData();
//o3=o2+o1;
o3=o1+=o2;
o1.print();
o2.print();
o3.print();
getch();
}بس ملاحظة عالماشي: الـ Operator overloading ليس له علاقة بالـ Object Oriented Programmign PAradigm, يعني ليس جزء من فلسلفة البرمجة الكائنية, بل هو اضافة من السي بلص بلص.
شكرا على المعلومة,
و اسف على كل حال
هذا الموضوع مغلق.